registerExtensionToolsOnSession(SessionsRegisterExtensionToolsOnSessionParams params) {
- return caller.invoke("sessions.registerExtensionToolsOnSession", params, SessionsRegisterExtensionToolsOnSessionResult.class);
- }
-
/**
* Params to attach or detach an in-process ExtensionController delegate.
*
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugApi.java
index e0ca94374a..b2cd030183 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugApi.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugApi.java
@@ -31,7 +31,7 @@ public final class SessionDebugApi {
}
/**
- * Options for collecting a redacted session debug bundle.
+ * Options for collecting a session debug bundle with configurable redaction.
*
* Note: the {@code sessionId} field in the params record is overridden
* by the session-scoped wrapper; any value provided is ignored.
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsParams.java
index 2076e2ad7d..f578f0bad7 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsParams.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsParams.java
@@ -15,7 +15,7 @@
import javax.annotation.processing.Generated;
/**
- * Options for collecting a redacted session debug bundle.
+ * Options for collecting a session debug bundle with configurable redaction.
*
* @apiNote This method is experimental and may change in a future version.
* @since 1.0.0
@@ -27,7 +27,7 @@
public record SessionDebugCollectLogsParams(
/** Target session identifier */
@JsonProperty("sessionId") String sessionId,
- /** Where the redacted bundle should be written. Use `archive` to produce a .tgz, or `directory` to stage redacted files for caller-managed upload/post-processing. */
+ /** Where the bundle should be written. Use `archive` to produce a .tgz, or `directory` to stage files for caller-managed upload/post-processing. */
@JsonProperty("destination") Object destination,
/** Which built-in session diagnostics to include. Omitted fields default to true. */
@JsonProperty("include") DebugCollectLogsInclude include,
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsResult.java
index 623792b02b..ef79198d86 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsResult.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionDebugCollectLogsResult.java
@@ -15,7 +15,7 @@
import javax.annotation.processing.Generated;
/**
- * Result of collecting a redacted debug bundle.
+ * Result of collecting a session debug bundle.
*
* @apiNote This method is experimental and may change in a future version.
* @since 1.0.0
@@ -29,7 +29,7 @@ public record SessionDebugCollectLogsResult(
@JsonProperty("kind") DebugCollectLogsResultKind kind,
/** Actual archive path or staging directory path written. This may differ from the requested path when no-overwrite suffixing or fallback-to-temp-directory was needed. */
@JsonProperty("path") String path,
- /** Files included in the redacted bundle. */
+ /** Files included in the bundle. */
@JsonProperty("entries") List entries,
/** Optional files or directories that could not be included. */
@JsonProperty("skippedEntries") List skippedEntries
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java
index 52577dd16a..56e96953f0 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java
@@ -47,7 +47,7 @@ public record SessionOpenOptions(
@JsonProperty("integrationId") String integrationId,
/** ExP assignment ('flight') data injected by an SDK integrator, in the same JSON shape the Copilot CLI fetches from the experimentation service (CopilotExpAssignmentResponse). When supplied this is fed into the FeatureFlagService exactly like CLI-fetched assignments and ExP-backed flags wait for it. When absent the session does not block on ExP. */
@JsonProperty("expAssignments") Object expAssignments,
- /** Opt-in: self-fetch and enforce enterprise managed settings at session bootstrap. */
+ /** Opt-in: self-fetch and enforce enterprise managed settings, including managed hook policies, at session bootstrap. */
@JsonProperty("enableManagedSettings") Boolean enableManagedSettings,
/** Permissions-only enterprise policy injected by the SDK host at session create or resume. Composes restrictively with self-fetched and device policy and is not persisted. */
@JsonProperty("managedSettings") SessionManagedSettings managedSettings,
@@ -109,6 +109,8 @@ public record SessionOpenOptions(
@JsonProperty("envValueMode") SessionOpenOptionsEnvValueMode envValueMode,
/** MCP server names disabled for this session. Disabled servers are not started or authenticated on create or cold resume. */
@JsonProperty("disabledMcpServers") List disabledMcpServers,
+ /** Non-secret host-managed HTTP MCP servers keyed by stable managed identity. Managed provenance is runtime-established from this separate field and credentials are supplied through dynamic-header refresh. */
+ @JsonProperty("managedMcpServers") Map managedMcpServers,
/** Whether to include instructions from every MCP server in the system prompt instead of only allowlisted servers. */
@JsonProperty("allowAllMcpServerInstructions") Boolean allowAllMcpServerInstructions,
/** Additional directories to search for skills. */
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesParams.java
index 2943192041..9c488a8287 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesParams.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesParams.java
@@ -28,7 +28,7 @@
public record SessionSendMessagesParams(
/** Target session identifier */
@JsonProperty("sessionId") String sessionId,
- /** The user messages to append to the conversation, in order. May be empty, in which case a single turn runs over the existing history with no new user message. */
+ /** The user messages to append to the conversation, in order, before running one agent loop. When the batch starts a run, its final message is the primary initiating message; earlier messages provide context, not separate runs or replies. May be empty, in which case a single turn runs over the existing history with no new user message or originatingMessageId. */
@JsonProperty("messages") List messages,
/** How to deliver the messages. `enqueue` (default) appends to the message queue. `immediate` interjects during an in-progress turn. */
@JsonProperty("mode") SendMode mode,
@@ -38,6 +38,8 @@ public record SessionSendMessagesParams(
@JsonProperty("agentMode") SendAgentMode agentMode,
/** Custom HTTP headers to include in outbound model requests for this turn. Merged with session-level provider headers; per-turn headers augment and overwrite session-level headers with the same key. */
@JsonProperty("requestHeaders") Map requestHeaders,
+ /** Provider-native output format for the whole turn, including an empty message batch and all tool-call iterations. Not inherited by later turns or subagents. Ordinary steering inherits the active format; specifying responseFormat with mode: immediate is an error, even while idle. Returned assistant content remains text; the runtime does not parse or validate it. Unsupported models or schemas produce provider errors. */
+ @JsonProperty("responseFormat") SessionSendMessagesParamsResponseFormat responseFormat,
/** W3C Trace Context traceparent header for distributed tracing of this agent turn */
@JsonProperty("traceparent") String traceparent,
/** W3C Trace Context tracestate header for distributed tracing */
@@ -45,4 +47,14 @@ public record SessionSendMessagesParams(
/** If true, await completion of the agentic loop for this turn before returning. Defaults to false (fire-and-forget). When true, the result still contains the same `messageIds`; the caller can rely on the agent having processed the messages before the call resolves. Transport-dependent tail semantics: on a LOCAL (in-process) session the wait additionally blocks until the completed turn's event tail has been dispatched to this session's in-process subscribers, so a subsequent read of subscriber state already reflects the turn; on a REMOTE session the wait resolves once the loop completes and mirrored delivery follows over the wire. Callers that need the stronger local guarantee on remote sessions should await the event stream explicitly. */
@JsonProperty("wait") Boolean wait_
) {
+
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public record SessionSendMessagesParamsResponseFormat(
+ /** JSON Schema and provider options for the turn's output. */
+ @JsonProperty("jsonSchema") JsonSchemaResponseFormat jsonSchema,
+ /** Output format discriminator. Currently only json_schema is supported. */
+ @JsonProperty("type") String type
+ ) {
+ }
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesResult.java
index aeb556ba0f..5fbdac79a6 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesResult.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendMessagesResult.java
@@ -25,7 +25,7 @@
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public record SessionSendMessagesResult(
- /** Unique identifiers assigned to the messages, one per provided message in order. Empty when no messages were provided. */
+ /** Unique identifiers assigned to the messages, one per provided message in order. For a batch that starts a run, assistant messages use the final ID as originatingMessageId throughout that run, including tool iterations and stop-hook corrections. Immediate steering does not replace the active run's origin. Empty when no messages were provided; that run has no originatingMessageId. */
@JsonProperty("messageIds") List messageIds
) {
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendParams.java
index f19c85ebe2..964c48b438 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendParams.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionSendParams.java
@@ -48,6 +48,8 @@ public record SessionSendParams(
@JsonProperty("agentMode") SendAgentMode agentMode,
/** Custom HTTP headers to include in outbound model requests for this turn. Merged with session-level provider headers; per-turn headers augment and overwrite session-level headers with the same key. */
@JsonProperty("requestHeaders") Map requestHeaders,
+ /** Provider-native output format for this turn, including all tool-call iterations. Not inherited by later turns or subagents. Ordinary steering inherits the active format; specifying responseFormat with mode: immediate is an error, even while idle. Returned assistant content remains text; the runtime does not parse or validate it. Unsupported models or schemas produce provider errors. */
+ @JsonProperty("responseFormat") SessionSendParamsResponseFormat responseFormat,
/** W3C Trace Context traceparent header for distributed tracing of this agent turn */
@JsonProperty("traceparent") String traceparent,
/** W3C Trace Context tracestate header for distributed tracing */
@@ -55,4 +57,14 @@ public record SessionSendParams(
/** If true, await completion of the agentic loop for this message before returning. Defaults to false (fire-and-forget). When true, the result still contains the same `messageId`; the caller can rely on the agent having processed the message before the call resolves. Transport-dependent tail semantics: on a LOCAL (in-process) session the wait additionally blocks until the completed turn's event tail has been dispatched to this session's in-process subscribers, so a subsequent read of subscriber state already reflects the turn; on a REMOTE session the wait resolves once the loop completes and mirrored delivery follows over the wire. Callers that need the stronger local guarantee on remote sessions should await the event stream explicitly. */
@JsonProperty("wait") Boolean wait_
) {
+
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public record SessionSendParamsResponseFormat(
+ /** JSON Schema and provider options for the turn's output. */
+ @JsonProperty("jsonSchema") JsonSchemaResponseFormat jsonSchema,
+ /** Output format discriminator. Currently only json_schema is supported. */
+ @JsonProperty("type") String type
+ ) {
+ }
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionOptions.java
deleted file mode 100644
index e19737e32e..0000000000
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionOptions.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- *--------------------------------------------------------------------------------------------*/
-
-// AUTO-GENERATED FILE - DO NOT EDIT
-// Generated from: api.schema.json
-
-package com.github.copilot.generated.rpc;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import javax.annotation.processing.Generated;
-
-/**
- * Optional registration options.
- *
- * @since 1.0.0
- */
-@javax.annotation.processing.Generated("copilot-sdk-codegen")
-@JsonInclude(JsonInclude.Include.NON_NULL)
-@JsonIgnoreProperties(ignoreUnknown = true)
-public record SessionsRegisterExtensionToolsOnSessionOptions(
- /** In-process `() => boolean` gating callback used only by the CLI. */
- @JsonProperty("enabled") Object enabled
-) {
-}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionParams.java
deleted file mode 100644
index 7fcb3322e9..0000000000
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionsRegisterExtensionToolsOnSessionParams.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- *--------------------------------------------------------------------------------------------*/
-
-// AUTO-GENERATED FILE - DO NOT EDIT
-// Generated from: api.schema.json
-
-package com.github.copilot.generated.rpc;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.github.copilot.CopilotExperimental;
-import javax.annotation.processing.Generated;
-
-/**
- * Params to attach an extension loader's tools to a session.
- *
- * @apiNote This method is experimental and may change in a future version.
- * @since 1.0.0
- */
-@CopilotExperimental
-@javax.annotation.processing.Generated("copilot-sdk-codegen")
-@JsonInclude(JsonInclude.Include.NON_NULL)
-@JsonIgnoreProperties(ignoreUnknown = true)
-public record SessionsRegisterExtensionToolsOnSessionParams(
- /** Session to register extension tools on. */
- @JsonProperty("sessionId") String sessionId,
- /** In-process ExtensionLoader handle used only by the CLI and excluded from the public SDK surface. */
- @JsonProperty("loader") Object loader,
- /** Optional registration options. */
- @JsonProperty("options") SessionsRegisterExtensionToolsOnSessionOptions options
-) {
-}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandTextResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandTextResult.java
index 5f232e8b9c..015fa1f5f1 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandTextResult.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SlashCommandTextResult.java
@@ -44,6 +44,10 @@ public final class SlashCommandTextResult extends SlashCommandInvocationResult {
@JsonProperty("runtimeSettingsChanged")
private Boolean runtimeSettingsChanged;
+ /** Present when the invocation changed the sandbox for this session only. Nothing was persisted, so consumers must mirror the change onto the live session rather than reloading settings, and must not treat it as a settings change. */
+ @JsonProperty("sandboxSessionChange")
+ private SandboxSessionChange sandboxSessionChange;
+
public String getText() { return text; }
public void setText(String text) { this.text = text; }
@@ -55,4 +59,7 @@ public final class SlashCommandTextResult extends SlashCommandInvocationResult {
public Boolean getRuntimeSettingsChanged() { return runtimeSettingsChanged; }
public void setRuntimeSettingsChanged(Boolean runtimeSettingsChanged) { this.runtimeSettingsChanged = runtimeSettingsChanged; }
+
+ public SandboxSessionChange getSandboxSessionChange() { return sandboxSessionChange; }
+ public void setSandboxSessionChange(SandboxSessionChange sandboxSessionChange) { this.sandboxSessionChange = sandboxSessionChange; }
}
diff --git a/java/sdk/src/test/java/com/github/copilot/McpOAuthE2ETest.java b/java/sdk/src/test/java/com/github/copilot/McpOAuthE2ETest.java
index 623033a4aa..0eb6765174 100644
--- a/java/sdk/src/test/java/com/github/copilot/McpOAuthE2ETest.java
+++ b/java/sdk/src/test/java/com/github/copilot/McpOAuthE2ETest.java
@@ -167,7 +167,7 @@ void testShouldRequestReplacementTokensAcrossMcpOauthLifecycle() throws Exceptio
assertNotNull(request.wwwAuthenticateParams());
assertEquals(oauthServer.url() + "/.well-known/oauth-protected-resource",
request.wwwAuthenticateParams().resourceMetadataUrl());
- assertEquals("mcp.write", request.wwwAuthenticateParams().scope());
+ assertEquals("mcp.read mcp.write", request.wwwAuthenticateParams().scope());
assertEquals("insufficient_scope", request.wwwAuthenticateParams().error());
yield McpAuthResult.token(new McpAuthToken(UPSCOPE_TOKEN, null, null));
}
diff --git a/java/sdk/src/test/java/com/github/copilot/RpcSessionStateExtrasE2ETest.java b/java/sdk/src/test/java/com/github/copilot/RpcSessionStateExtrasE2ETest.java
index a51a7eab53..676ef3d943 100644
--- a/java/sdk/src/test/java/com/github/copilot/RpcSessionStateExtrasE2ETest.java
+++ b/java/sdk/src/test/java/com/github/copilot/RpcSessionStateExtrasE2ETest.java
@@ -59,7 +59,7 @@ void testShouldAddByokProviderAndModelAtRuntime() throws Exception {
ProviderConfigWireApi.COMPLETIONS, null, "https://models.example.test/v1",
"provider-key", null, null, Map.of("x-provider", "java"), null)),
List.of(new ProviderModelConfig("small", "java-e2e-provider", null, null, "Java Added Model",
- 4096L, null, null, null))))
+ 4096L, null, null, null, null))))
.get(30, TimeUnit.SECONDS);
assertEquals(1, result.models().size());
diff --git a/java/sdk/src/test/java/com/github/copilot/SessionEventHandlingTest.java b/java/sdk/src/test/java/com/github/copilot/SessionEventHandlingTest.java
index 83913e82b1..a3891849ae 100644
--- a/java/sdk/src/test/java/com/github/copilot/SessionEventHandlingTest.java
+++ b/java/sdk/src/test/java/com/github/copilot/SessionEventHandlingTest.java
@@ -1005,8 +1005,9 @@ private SessionStartEvent createSessionStartEvent(String sessionId) {
private AssistantMessageEvent createAssistantMessageEvent(String content) {
var event = new AssistantMessageEvent();
- var data = new AssistantMessageEvent.AssistantMessageEventData(null, null, content, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
+ var data = new AssistantMessageEvent.AssistantMessageEventData(null, null, null, content, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null);
event.setData(data);
return event;
}
diff --git a/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java b/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
index 9f9e1c441b..908f12e825 100644
--- a/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
+++ b/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
@@ -653,7 +653,7 @@ void sessionLogResult_record() {
@Test
void sessionMcpListResult_nested() {
var metadata = new McpServerMetadata("Use this server for repository operations.");
- var server = new McpServer("my-mcp", McpServerStatus.CONNECTED, McpServerSource.USER, null, null, null,
+ var server = new McpServer("my-mcp", McpServerStatus.CONNECTED, McpServerSource.USER, null, null, null, null,
metadata);
var result = new SessionMcpListResult(List.of(server), null);
assertEquals(1, result.servers().size());
diff --git a/nodejs/package.json b/nodejs/package.json
index 8805d0d4d8..d1565035d8 100644
--- a/nodejs/package.json
+++ b/nodejs/package.json
@@ -5,7 +5,7 @@
"url": "https://github.com/github/copilot-sdk.git"
},
"version": "0.0.0-dev",
- "copilotCliVersion": "1.0.84-5",
+ "copilotCliVersion": "1.0.84-6",
"description": "TypeScript SDK for programmatic control of GitHub Copilot CLI via JSON-RPC",
"main": "./dist/cjs/index.js",
"types": "./dist/index.d.ts",
diff --git a/nodejs/src/cliVersion.ts b/nodejs/src/cliVersion.ts
index fc4c85afce..4e7d99b1ea 100644
--- a/nodejs/src/cliVersion.ts
+++ b/nodejs/src/cliVersion.ts
@@ -1,3 +1,3 @@
-export const COPILOT_CLI_VERSION = "1.0.84-5";
+export const COPILOT_CLI_VERSION = "1.0.84-6";
export const COPILOT_CLI_USE_NPM_PACKAGE = false;
diff --git a/nodejs/src/generated/rpc.ts b/nodejs/src/generated/rpc.ts
index 09bfc8ffa7..43277362af 100644
--- a/nodejs/src/generated/rpc.ts
+++ b/nodejs/src/generated/rpc.ts
@@ -943,7 +943,7 @@ export type DebugCollectLogsSource =
/** Caller-provided diagnostic entry. */
| "additional";
/**
- * Destination for the redacted debug bundle.
+ * Destination for the session debug bundle.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
* via the `definition` "DebugCollectLogsDestination".
@@ -966,7 +966,7 @@ export type DebugCollectLogsDestination =
}
| {
/**
- * Directory where redacted files should be staged. The directory is created if needed.
+ * Directory where files should be staged. The directory is created if needed.
*/
outputDirectory: string;
/**
@@ -997,7 +997,9 @@ export type DebugCollectLogsRedaction =
/** Redact the file as plain UTF-8 log text. */
| "plain-text"
/** Redact each non-empty line as a session event JSON object, falling back to plain-text redaction for malformed lines. */
- | "events-jsonl";
+ | "events-jsonl"
+ /** No redaction is applied. The caller must ensure any necessary redaction is performed before this call. */
+ | "none";
/**
* Destination kind that was written.
*
@@ -1008,7 +1010,7 @@ export type DebugCollectLogsRedaction =
export type DebugCollectLogsResultKind =
/** A .tgz archive was written. */
| "archive"
- /** A directory containing redacted files was written. */
+ /** A directory containing the collected files was written. */
| "directory";
/**
* Persisted extension discovery source
@@ -1934,6 +1936,10 @@ export type McpHeadersHandlePendingHeadersRefreshRequest =
headers: {
[k: string]: string | undefined;
};
+ /**
+ * Optional lifetime in milliseconds for these returned headers. The runtime clamps its configured cache lifetime to this value.
+ */
+ ttlMs?: number;
/**
* Headers-refresh response variant discriminator.
*/
@@ -1944,6 +1950,16 @@ export type McpHeadersHandlePendingHeadersRefreshRequest =
* Headers-refresh response variant discriminator.
*/
kind: "none";
+ }
+ | {
+ /**
+ * Host credential broker failure, denial, or revocation reason.
+ */
+ message: string;
+ /**
+ * Headers-refresh response variant discriminator.
+ */
+ kind: "error";
};
/**
* One eligible way to run the server, represented as a tagged package or remote variant so package identity and endpoint states cannot contradict the install method.
@@ -2938,6 +2954,12 @@ export type PluginsReloadRequest =
*/
deferRepoHooks?: boolean;
};
+
+/** @experimental */
+export type ProtocolAppendMode = "append";
+
+/** @experimental */
+export type ProtocolCustomizeMode = "customize";
/**
* Controls whether the runtime may defer loading an external tool definition.
*
@@ -2950,6 +2972,44 @@ export type ProtocolExternalToolDefer =
| "auto"
/** The runtime must include the tool without deferring it. */
| "never";
+
+/** @experimental */
+export type ProtocolMarkerSectionOverride =
+ | {
+ /**
+ * Section override action discriminator.
+ */
+ action: "transform";
+ }
+ | {
+ /**
+ * Section override action discriminator.
+ */
+ action: "preserve";
+ };
+
+/** @experimental */
+export type ProtocolReplaceMode = "replace";
+
+/** @experimental */
+export type ProtocolSectionOverride = ProtocolStaticSectionOverride | ProtocolMarkerSectionOverride;
+
+/** @experimental */
+export type ProtocolStaticSectionAction =
+ /** Replace the section content. */
+ | "replace"
+ /** Remove the section content. */
+ | "remove"
+ /** Append content to the section. */
+ | "append"
+ /** Prepend content to the section. */
+ | "prepend";
+
+/** @experimental */
+export type ProtocolSystemMessageConfig =
+ | ProtocolSystemMessageAppendConfig
+ | ProtocolSystemMessageReplaceConfig
+ | ProtocolSystemMessageCustomizeConfig;
/**
* Provider family. Matches the `type` field of a BYOK provider config.
*
@@ -3136,6 +3196,20 @@ export type RemoteSessionMetadataTaskType =
| "cca"
/** CLI remote task. */
| "cli";
+/**
+ * Provider-native structured output format. JSON Schema is forwarded without rewriting or validating the schema or the generated output.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "ResponseFormat".
+ */
+/** @experimental */
+export type ResponseFormat = {
+ jsonSchema: JsonSchemaResponseFormat;
+ /**
+ * Output format discriminator. Currently only json_schema is supported.
+ */
+ type: "json_schema";
+};
/**
* Origin of the sandbox choice supplied by an internal client.
*
@@ -3159,6 +3233,18 @@ export type SandboxConfigSource =
| "unsupported_host"
/** A repository policy selected the sandbox state. */
| "repository_policy";
+/**
+ * A session-scoped sandbox transition applied while handling a slash command
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "SandboxSessionChange".
+ */
+/** @experimental */
+export type SandboxSessionChange =
+ /** The sandbox is off for the rest of this session; nothing was persisted and a new session starts from managed policy. */
+ | "disabled"
+ /** A previous session-scoped opt-out was cleared and the sandbox is enforced again. */
+ | "restored";
/**
* Current authentication information, or null when no authentication is active.
*
@@ -7336,7 +7422,7 @@ export interface CurrentToolMetadata {
deferLoading?: boolean;
}
/**
- * A file included in the redacted debug bundle.
+ * A file included in the session debug bundle.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
* via the `definition` "DebugCollectLogsCollectedEntry".
@@ -7414,7 +7500,7 @@ export interface DebugCollectLogsInclude {
previousProcessLogLimit?: number;
}
/**
- * Options for collecting a redacted session debug bundle.
+ * Options for collecting a session debug bundle with configurable redaction.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
* via the `definition` "DebugCollectLogsRequest".
@@ -7429,7 +7515,7 @@ export interface DebugCollectLogsRequest {
additionalEntries?: DebugCollectLogsEntry[];
}
/**
- * Result of collecting a redacted debug bundle.
+ * Result of collecting a session debug bundle.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
* via the `definition` "DebugCollectLogsResult".
@@ -7442,7 +7528,7 @@ export interface DebugCollectLogsResult {
*/
path: string;
/**
- * Files included in the redacted bundle.
+ * Files included in the bundle.
*/
entries: DebugCollectLogsCollectedEntry[];
/**
@@ -10042,6 +10128,10 @@ export interface InstalledPluginInfo {
* Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — a plugin belonging to a directory/local marketplace, which is loaded from its real directory on every pass instead of a copy under the installed-plugins cache. Its presence is what marks a listed plugin as live: such a plugin is always present on disk, so `enabled` is its only meaningful state and it is never "not installed".
*/
installedFrom?: string;
+ /**
+ * Runtime-reported plugin provenance. Currently set to "builtin" only for plugins registered through the trusted host built-in boundary; absent for installed, marketplace, direct, and live plugins.
+ */
+ source?: string;
}
/**
* Canonical file or directory where custom instructions can be discovered or created, with location, kind, preference, and project path.
@@ -10195,6 +10285,31 @@ export interface InterruptMainTurnResult {
*/
interrupted: boolean;
}
+/**
+ * A JSON Schema output contract. OpenAI receives the name, description, schema and strict setting; Anthropic receives the schema in output_config.format and always uses its native strict enforcement.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "JsonSchemaResponseFormat".
+ */
+/** @experimental */
+export interface JsonSchemaResponseFormat {
+ /**
+ * Name of the output schema, subject to the provider's naming restrictions.
+ */
+ name: string;
+ /**
+ * JSON Schema passed unchanged to the inference provider. Schemas larger than 32 MiB when JSON-encoded are rejected before admission, using the runtime's existing request-size ceiling. This is not a guarantee that the entire model request fits. Supported keywords and schema restrictions are determined by the provider.
+ */
+ schema: JsonValue;
+ /**
+ * Optional description passed to OpenAI providers.
+ */
+ description?: string;
+ /**
+ * Optional strict enforcement setting for OpenAI providers. Omitted uses the provider default. Anthropic always enforces its supported schema subset.
+ */
+ strict?: boolean;
+}
/**
* HTTP headers as a map from lowercased header name to a list of values. Multi-valued headers (e.g. Set-Cookie) preserve all values.
*
@@ -10541,6 +10656,35 @@ export interface LspInitializeRequest {
*/
force?: boolean;
}
+/**
+ * Non-secret host-managed HTTP MCP server configuration. The containing map key is the stable managed identity; credentials are supplied dynamically by the host.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "ManagedMcpServerConfig".
+ */
+/** @experimental */
+export interface ManagedMcpServerConfig {
+ /**
+ * Human-readable catalog display name.
+ */
+ displayName: string;
+ /**
+ * Hosted MCP streamable HTTP endpoint.
+ */
+ url: string;
+ /**
+ * Tools to include. Defaults to all tools when omitted.
+ */
+ tools?: string[];
+ /**
+ * Timeout in milliseconds for tool discovery and tool calls.
+ */
+ timeout?: number;
+ /**
+ * Maximum dynamic-header cache lifetime in milliseconds.
+ */
+ headersRefreshTtlMs?: number;
+}
/**
* Validated device-managed settings discovered before a session exists.
*
@@ -12585,6 +12729,10 @@ export interface McpServer {
* Plugin version that provided this server, when source is plugin.
*/
sourcePluginVersion?: string;
+ /**
+ * Human-readable display name supplied by a managed server catalog.
+ */
+ displayName?: string;
/**
* Error message if the server failed to connect
*/
@@ -15990,6 +16138,64 @@ export interface ProtocolExternalToolDefinition {
[k: string]: JsonValue | undefined;
};
}
+
+/** @experimental */
+export interface ProtocolStaticSectionOverride {
+ action: ProtocolStaticSectionAction;
+ /**
+ * Optional content used by replace, append, and prepend operations.
+ */
+ content?: string;
+}
+
+/** @experimental */
+export interface ProtocolSystemMessageAppendConfig {
+ mode?: ProtocolAppendMode;
+ /**
+ * Text appended to the standard system prompt.
+ */
+ content?: string;
+}
+
+/** @experimental */
+export interface ProtocolSystemMessageReplaceConfig {
+ mode: ProtocolReplaceMode;
+ /**
+ * Complete replacement system-message text.
+ */
+ content: string;
+ /**
+ * Optional structured blocks corresponding to the replacement content.
+ */
+ contentBlocks?: SystemMessageBlock[];
+}
+
+/** @experimental */
+export interface SystemMessageBlock {
+ /**
+ * Text content for this system-message block.
+ */
+ content: string;
+ /**
+ * Whether the block is static and may be cached independently of dynamic prompt content.
+ */
+ isStatic?: boolean;
+}
+
+/** @experimental */
+export interface ProtocolSystemMessageCustomizeConfig {
+ mode: ProtocolCustomizeMode;
+ /**
+ * Named standard-prompt section overrides.
+ */
+ sections?: {
+ [k: string]: ProtocolSectionOverride;
+ };
+ /**
+ * Text appended after the customized sections.
+ */
+ content?: string;
+}
/**
* BYOK providers and/or models to add to the session's registry at runtime. Both fields are optional; provide providers, models, or both.
*
@@ -16048,6 +16254,7 @@ export interface ProviderModelConfig {
*/
maxOutputTokens?: number;
capabilities?: ModelCapabilitiesOverride;
+ systemMessage?: ProtocolSystemMessageConfig;
}
/**
* The selectable model entries synthesized for the models added by this call.
@@ -17118,62 +17325,6 @@ export interface RegisterEventInterestResult {
*/
handle: string;
}
-/**
- * Params to attach an extension loader's tools to a session.
- *
- * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "RegisterExtensionToolsParams".
- */
-/** @experimental */
-/** @internal */
-export interface RegisterExtensionToolsParams {
- /**
- * Session to register extension tools on.
- */
- sessionId: string;
- /**
- * In-process ExtensionLoader handle used only by the CLI and excluded from the public SDK surface.
- *
- * @internal
- *
- * @internal
- */
- loader: OpaqueInProcessValue;
- options?: SessionsRegisterExtensionToolsOnSessionOptions;
-}
-/**
- * Optional registration options.
- *
- * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "SessionsRegisterExtensionToolsOnSessionOptions".
- */
-/** @experimental */
-export interface SessionsRegisterExtensionToolsOnSessionOptions {
- /**
- * In-process `() => boolean` gating callback used only by the CLI.
- *
- * @internal
- */
- enabled?: OpaqueInProcessValue;
-}
-/**
- * Handle for releasing the extension tool registration.
- *
- * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "RegisterExtensionToolsResult".
- */
-/** @experimental */
-/** @internal */
-export interface RegisterExtensionToolsResult {
- /**
- * In-process unsubscribe function used only by the CLI.
- *
- * @internal
- *
- * @internal
- */
- unsubscribe: OpaqueInProcessValue;
-}
/**
* Opaque handle previously returned by `registerInterest` to release.
*
@@ -17618,6 +17769,14 @@ export interface SandboxConfigUserPolicyFilesystem {
*/
/** @experimental */
export interface SandboxConfigUserPolicyNetwork {
+ /**
+ * Hosts allowed through the built-in sandbox proxy. A non-empty list denies unmatched hosts; an absent or empty list allows all hosts not blocked. Supports exact hostnames, IP addresses, and *.example.com for strict subdomains. Host rules do not override the outbound or local-network toggles.
+ */
+ allowedHosts?: string[];
+ /**
+ * Hosts denied by the built-in sandbox proxy. Deny rules take precedence over allowedHosts. A domain also denies all its subdomains. IP addresses match exactly; *.example.com matches strict subdomains, and * denies every host.
+ */
+ blockedHosts?: string[];
/**
* Whether outbound network traffic is allowed at all.
*/
@@ -18068,7 +18227,7 @@ export interface SendMessageItem {
/** @experimental */
export interface SendMessagesRequest {
/**
- * The user messages to append to the conversation, in order. May be empty, in which case a single turn runs over the existing history with no new user message.
+ * The user messages to append to the conversation, in order, before running one agent loop. When the batch starts a run, its final message is the primary initiating message; earlier messages provide context, not separate runs or replies. May be empty, in which case a single turn runs over the existing history with no new user message or originatingMessageId.
*/
messages: SendMessageItem[];
mode?: SendMode;
@@ -18083,6 +18242,7 @@ export interface SendMessagesRequest {
requestHeaders?: {
[k: string]: string | undefined;
};
+ responseFormat?: ResponseFormat;
/**
* W3C Trace Context traceparent header for distributed tracing of this agent turn
*/
@@ -18105,7 +18265,7 @@ export interface SendMessagesRequest {
/** @experimental */
export interface SendMessagesResult {
/**
- * Unique identifiers assigned to the messages, one per provided message in order. Empty when no messages were provided.
+ * Unique identifiers assigned to the messages, one per provided message in order. For a batch that starts a run, assistant messages use the final ID as originatingMessageId throughout that run, including tool iterations and stop-hook corrections. Immediate steering does not replace the active run's origin. Empty when no messages were provided; that run has no originatingMessageId.
*/
messageIds: string[];
}
@@ -18155,6 +18315,7 @@ export interface SendRequest {
requestHeaders?: {
[k: string]: string | undefined;
};
+ responseFormat?: ResponseFormat;
/**
* W3C Trace Context traceparent header for distributed tracing of this agent turn
*/
@@ -19329,7 +19490,7 @@ export interface SessionOpenOptions {
*/
expAssignments?: JsonValue;
/**
- * Opt-in: self-fetch and enforce enterprise managed settings at session bootstrap.
+ * Opt-in: self-fetch and enforce enterprise managed settings, including managed hook policies, at session bootstrap.
*/
enableManagedSettings?: boolean;
managedSettings?: SessionManagedSettings;
@@ -19437,6 +19598,14 @@ export interface SessionOpenOptions {
* MCP server names disabled for this session. Disabled servers are not started or authenticated on create or cold resume.
*/
disabledMcpServers?: string[];
+ /**
+ * Non-secret host-managed HTTP MCP servers keyed by stable managed identity. Managed provenance is runtime-established from this separate field and credentials are supplied through dynamic-header refresh.
+ *
+ * @experimental
+ */
+ managedMcpServers?: {
+ [k: string]: ManagedMcpServerConfig;
+ };
/**
* Whether to include instructions from every MCP server in the system prompt instead of only allowlisted servers.
*/
@@ -21605,6 +21774,7 @@ export interface SlashCommandTextResult {
* True when the invocation mutated user runtime settings; consumers caching settings should refresh
*/
runtimeSettingsChanged?: boolean;
+ sandboxSessionChange?: SandboxSessionChange;
}
/**
* Slash-command invocation result asking the client to present subcommand options for a parent command.
@@ -25178,16 +25348,7 @@ export function createInternalServerRpc(connection: MessageConnection) {
getBoardEntryCount: async (params: SessionsGetBoardEntryCountRequest): Promise =>
connection.sendRequest("sessions.getBoardEntryCount", params),
/**
- * Registers extension-provided tools on the given session, gated by an optional `enabled` callback. Returns an opaque unsubscribe function the caller must invoke to deregister the tools when the extension is torn down. Marked internal because `loader`, `enabled`, and the returned `unsubscribe` are in-process handles that cannot cross the JSON-RPC boundary. Disappears once extension discovery / launch / tool registration are owned by the runtime: SDK consumers will pass pure config (search paths, disabled ids) via `SessionOptions` and the runtime will resolve, launch, register, and tear down extensions itself.
- *
- * @param params Params to attach an extension loader's tools to a session.
- *
- * @returns Handle for releasing the extension tool registration.
- */
- registerExtensionToolsOnSession: async (params: RegisterExtensionToolsParams): Promise =>
- connection.sendRequest("sessions.registerExtensionToolsOnSession", params),
- /**
- * Attaches (or detaches) an in-process ExtensionController delegate for the given session, used by shared-API surfaces that need to query or modify the session's extension state. Pass `controller: undefined` to detach. Marked internal because the controller is an in-process object that cannot cross the JSON-RPC boundary. Disappears alongside `registerExtensionToolsOnSession`: once the runtime owns extension management, the public surface exposes list/enable/disable/reload as dedicated RPCs served by the runtime.
+ * Attaches (or detaches) an in-process ExtensionController delegate for the given session in a local host adapter. Pass `controller: undefined` to detach. Internal because the controller cannot cross the JSON-RPC boundary; the runtime manages its own session extension service.
*
* @param params Params to attach or detach an in-process ExtensionController delegate.
*/
@@ -25310,11 +25471,11 @@ export function createSessionRpc(connection: MessageConnection, sessionId: strin
/** @experimental */
debug: {
/**
- * Collects a redacted session debug log bundle into a local archive or staging directory. The runtime includes session-owned logs by default and accepts caller-provided diagnostic entries so host applications can add their own files without changing this API shape.
+ * Collects a session debug log bundle into a local archive or staging directory. Logs are redacted by default; redaction can be configured per caller-provided diagnostic entry. The runtime includes session-owned logs by default and accepts caller-provided diagnostic entries so host applications can add their own files without changing this API shape.
*
- * @param params Options for collecting a redacted session debug bundle.
+ * @param params Options for collecting a session debug bundle with configurable redaction.
*
- * @returns Result of collecting a redacted debug bundle.
+ * @returns Result of collecting a session debug bundle.
*/
collectLogs: async (params: DebugCollectLogsRequest): Promise =>
connection.sendRequest("session.debug.collectLogs", { sessionId, ...params }),
diff --git a/nodejs/src/generated/session-events.ts b/nodejs/src/generated/session-events.ts
index 5bd67b8042..d6d094e69d 100644
--- a/nodejs/src/generated/session-events.ts
+++ b/nodejs/src/generated/session-events.ts
@@ -645,6 +645,20 @@ export type AbortReason =
| "user_abort"
/** Autopilot stopped the run because the active objective reached its user-set --max-ai-credits limit. */
| "autopilot_credit_limit";
+/**
+ * Configuration source: user, workspace, plugin, builtin, or managed
+ */
+export type McpServerSource =
+ /** Server configured in the user's global MCP configuration. */
+ | "user"
+ /** Server configured by the current workspace. */
+ | "workspace"
+ /** Server contributed by an installed plugin. */
+ | "plugin"
+ /** Server bundled with the runtime. */
+ | "builtin"
+ /** Server supplied by a trusted host-managed catalog. */
+ | "managed";
/**
* Transport mechanism: stdio, http, sse (deprecated), or memory (in-process MCP server)
*/
@@ -735,18 +749,6 @@ export type SkillInvokedTrigger =
| "agent-invoked"
/** Skill content loaded as part of another context, such as a configured custom agent or subagent. */
| "context-load";
-/**
- * Where the model input for a task-tool sub-agent came from.
- */
-export type SubagentTaskModelSource =
- /** The spawning agent supplied the task tool's model argument. */
- | "task_argument"
- /** The task omitted a model and the per-sub-agent settings entry supplied a concrete one. */
- | "subagent_configuration"
- /** The task omitted a model and the user-defined custom agent's definition supplied one. */
- | "custom_agent_definition"
- /** Neither the task call, the per-sub-agent settings entry, nor a custom agent definition supplied a model. */
- | "unset";
/**
* Authority or runtime mechanism responsible for sub-agent model selection.
*/
@@ -765,6 +767,18 @@ export type SubagentModelSelectionSource =
| "agent_definition_default"
/** Runtime policy, Auto mode, or an experiment selected the model. */
| "runtime_policy";
+/**
+ * Where the model input for a task-tool sub-agent came from.
+ */
+export type SubagentTaskModelSource =
+ /** The spawning agent supplied the task tool's model argument. */
+ | "task_argument"
+ /** The task omitted a model and the per-sub-agent settings entry supplied a concrete one. */
+ | "subagent_configuration"
+ /** The task omitted a model and the user-defined custom agent's definition supplied one. */
+ | "custom_agent_definition"
+ /** Neither the task call, the per-sub-agent settings entry, nor a custom agent definition supplied a model. */
+ | "unset";
/**
* Binary asset type discriminator. Use "image" for images and "resource" otherwise.
*/
@@ -1055,6 +1069,8 @@ export type McpHeadersRefreshCompletedOutcome =
| "headers"
/** The host responded with no dynamic headers. */
| "none"
+ /** The host credential broker rejected or failed the refresh. */
+ | "error"
/** No response arrived within the bounded window. */
| "timeout";
/**
@@ -1200,18 +1216,6 @@ export type AgentModelPolicy =
| "preferred"
/** Require subagent execution to use one of the authored models. */
| "required";
-/**
- * Configuration source: user, workspace, plugin, or builtin
- */
-export type McpServerSource =
- /** Server configured in the user's global MCP configuration. */
- | "user"
- /** Server configured by the current workspace. */
- | "workspace"
- /** Server contributed by an installed plugin. */
- | "plugin"
- /** Server bundled with the runtime. */
- | "builtin";
/**
* Connection status: connected, failed, needs-auth, pending, disabled, stopped, or not_configured
*/
@@ -5076,6 +5080,10 @@ export interface AssistantMessageData {
* Model that produced this assistant message, if known
*/
model?: string;
+ /**
+ * Logical ID of the primary user message that initiated this run, matching the messageId returned by session.send (or the last messageId of session.sendMessages). Stable across model/tool iterations, steering messages, and stop-hook corrections. Subagent runs use their own initiating message ID, not the parent's. Absent for runs without an associated initiating message, such as empty batches.
+ */
+ originatingMessageId?: string;
/**
* Actual output token count from the API response (completion_tokens), used for accurate token accounting
*/
@@ -6233,6 +6241,11 @@ export interface ToolExecutionStartData {
* @experimental
*/
fusion?: FusionAttribution;
+ /**
+ * Preferred lookup name for the MCP server hosting this tool: the configured (namespaced) config-map key when the tool carries one, otherwise the display name from `mcpServerName`. Present when the tool is an MCP tool; this is the name unrestricted provenance telemetry hashes so it joins with `mcp_server_setup`, which keys off the configured name too.
+ */
+ mcpConfigServerName?: string;
+ mcpConfigSource?: McpServerSource;
/**
* Name of the MCP server hosting this tool, when the tool is an MCP tool
*/
@@ -6540,7 +6553,7 @@ export interface ToolExecutionCompleteResult {
*/
contents?: ToolExecutionCompleteContent[];
/**
- * Full detailed tool result for UI/timeline display, preserving complete content such as diffs. Falls back to content when absent.
+ * Detailed tool result for UI/timeline display, preserving complete content such as diffs for most tools. Successful skill invocations intentionally use the concise model-facing content here; the authoritative skill body is carried by the corresponding skill invocation event. Falls back to content when absent.
*/
detailedContent?: string;
/**
@@ -7164,6 +7177,7 @@ export interface SubagentStartedData {
* Model the sub-agent will run with, when known at start.
*/
model?: string;
+ modelSelectionSource?: SubagentModelSelectionSource;
/**
* Task-registry ID of the spawning sub-agent. Absent when the root session spawned this child.
*/
@@ -7537,7 +7551,7 @@ export interface HookStartData {
*/
hookType: string;
/**
- * Input data passed to the hook. For postToolUse hooks the retained copy served by session.eventLog.read (and by a resumed session) elides the tool result's inline `contents`/`uiResource` and replaces an over-long `textResultForLlm` with a `[copilot:elided ...]` marker, to keep a multi-megabyte payload out of the durable event log; the live subscription stream still delivers the full value. Read the adjacent tool.execution_complete event for the tool result itself.
+ * Input data passed to the hook. For postToolUse hooks the retained copy served by session.eventLog.read (and by a resumed session) drops the tool result's inline `contents`/`uiResource`/`skillInvocation` and replaces duplicated text result fields with a `[copilot:elided ...]` marker; the live subscription stream still delivers the full value. Canonical tool output remains in the adjacent tool.execution_complete event, while an invoked skill's authoritative body remains in its skill invocation event.
*/
input?: JsonValue;
/**
@@ -7589,7 +7603,7 @@ export interface HookEndData {
*/
hookType: string;
/**
- * Output data produced by the hook
+ * Output data produced by the hook. Durable and resumed postToolUse receipts may omit messages owned by a successful skill invocation and replace an unchanged skill sessionLog copy with an elision marker; hook-modified or re-sourced values are preserved, and the authoritative body remains in the skill invocation event.
*/
output?: JsonValue;
/**
@@ -11661,6 +11675,10 @@ export interface McpServersLoadedData {
* A single MCP server status summary in `session.mcp_servers_loaded`, including name, status, source, transport, and plugin metadata.
*/
export interface McpServersLoadedServer {
+ /**
+ * Human-readable display name supplied by a managed server catalog.
+ */
+ displayName?: string;
/**
* Error message if the server failed to connect
*/
diff --git a/nodejs/test/e2e/mcp_oauth.e2e.test.ts b/nodejs/test/e2e/mcp_oauth.e2e.test.ts
index cd7a6b88c7..ab68afc2ef 100644
--- a/nodejs/test/e2e/mcp_oauth.e2e.test.ts
+++ b/nodejs/test/e2e/mcp_oauth.e2e.test.ts
@@ -251,7 +251,7 @@ describe("MCP OAuth host auth", async () => {
const upscopeRequest = authRequests.find((request) => request.reason === "upscope");
expect(upscopeRequest?.wwwAuthenticateParams).toEqual({
resourceMetadataUrl: `${oauthServer.url}/.well-known/oauth-protected-resource`,
- scope: "mcp.write",
+ scope: "mcp.read mcp.write",
error: "insufficient_scope",
});
expect(upscopeRequest?.resourceMetadata).toBe(
diff --git a/python/copilot/generated/rpc.py b/python/copilot/generated/rpc.py
index 237ec09620..c9d7c99f43 100644
--- a/python/copilot/generated/rpc.py
+++ b/python/copilot/generated/rpc.py
@@ -870,68 +870,6 @@ def to_dict(self) -> dict:
result["cancelled"] = from_bool(self.cancelled)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class CanvasAction:
- """Canvas action that the agent or host can invoke. To discover the input schema for a
- particular action, call the list_canvas_capabilities tool.
- """
- name: str
- """Action name exposed by the canvas provider"""
-
- description: str | None = None
- """Description of the action"""
-
- input_schema: Any = None
- """JSON Schema for the action input"""
-
- @staticmethod
- def from_dict(obj: Any) -> 'CanvasAction':
- assert isinstance(obj, dict)
- name = from_str(obj.get("name"))
- description = from_union([from_str, from_none], obj.get("description"))
- input_schema = obj.get("inputSchema")
- return CanvasAction(name, description, input_schema)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["name"] = from_str(self.name)
- if self.description is not None:
- result["description"] = from_union([from_str, from_none], self.description)
- if self.input_schema is not None:
- result["inputSchema"] = self.input_schema
- return result
-
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class CanvasActionInvokeRequest:
- """Canvas action invocation parameters."""
-
- action_name: str
- """Action name to invoke"""
-
- instance_id: str
- """Open canvas instance identifier"""
-
- input: Any = None
- """Action input"""
-
- @staticmethod
- def from_dict(obj: Any) -> 'CanvasActionInvokeRequest':
- assert isinstance(obj, dict)
- action_name = from_str(obj.get("actionName"))
- instance_id = from_str(obj.get("instanceId"))
- input = obj.get("input")
- return CanvasActionInvokeRequest(action_name, instance_id, input)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["actionName"] = from_str(self.action_name)
- result["instanceId"] = from_str(self.instance_id)
- if self.input is not None:
- result["input"] = self.input
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class CanvasCloseRequest:
@@ -2503,11 +2441,14 @@ class DebugCollectLogsResultKind(Enum):
# Experimental: this type is part of an experimental API and may change or be removed.
class DebugCollectLogsRedaction(Enum):
- """How text content from this entry should be redacted. Defaults to plain-text.
+ """How text content from this entry should be redacted. Defaults to plain-text. With none,
+ no redaction is applied; the caller must ensure any necessary redaction is performed
+ before this call.
How a collected debug entry should be redacted before being staged.
"""
EVENTS_JSONL = "events-jsonl"
+ NONE = "none"
PLAIN_TEXT = "plain-text"
# Experimental: this type is part of an experimental API and may change or be removed.
@@ -3611,15 +3552,6 @@ class FactoryLogLineKind(Enum):
LOG = "log"
PHASE = "phase"
-# Experimental: this type is part of an experimental API and may change or be removed.
-class FactoryPauseCheckpointAction(Enum):
- """Action the runtime selected for a durable factory pause checkpoint.
-
- Whether this execution attempt must pause or may continue.
- """
- CONTINUE = "continue"
- PAUSE = "pause"
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class FactoryPauseCheckpointRequest:
@@ -4514,6 +4446,51 @@ def to_dict(self) -> dict:
result["interrupted"] = from_bool(self.interrupted)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class JSONSchemaResponseFormat:
+ """A JSON Schema output contract. OpenAI receives the name, description, schema and strict
+ setting; Anthropic receives the schema in output_config.format and always uses its native
+ strict enforcement.
+
+ JSON Schema and provider options for the turn's output.
+ """
+ name: str
+ """Name of the output schema, subject to the provider's naming restrictions."""
+
+ schema: Any = None
+ """JSON Schema passed unchanged to the inference provider. Schemas larger than 32 MiB when
+ JSON-encoded are rejected before admission, using the runtime's existing request-size
+ ceiling. This is not a guarantee that the entire model request fits. Supported keywords
+ and schema restrictions are determined by the provider.
+ """
+ description: str | None = None
+ """Optional description passed to OpenAI providers."""
+
+ strict: bool | None = None
+ """Optional strict enforcement setting for OpenAI providers. Omitted uses the provider
+ default. Anthropic always enforces its supported schema subset.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'JSONSchemaResponseFormat':
+ assert isinstance(obj, dict)
+ name = from_str(obj.get("name"))
+ schema = obj.get("schema")
+ description = from_union([from_str, from_none], obj.get("description"))
+ strict = from_union([from_bool, from_none], obj.get("strict"))
+ return JSONSchemaResponseFormat(name, schema, description, strict)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["name"] = from_str(self.name)
+ result["schema"] = self.schema
+ if self.description is not None:
+ result["description"] = from_union([from_str, from_none], self.description)
+ if self.strict is not None:
+ result["strict"] = from_union([from_bool, from_none], self.strict)
+ return result
+
@dataclass
class LlmInferenceHTTPRequestChunkRequest:
"""A request body chunk or cancellation signal."""
@@ -4811,6 +4788,49 @@ def to_dict(self) -> dict:
result["workingDirectory"] = from_union([from_str, from_none], self.working_directory)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ManagedMCPServerConfig:
+ """Non-secret host-managed HTTP MCP server configuration. The containing map key is the
+ stable managed identity; credentials are supplied dynamically by the host.
+ """
+ display_name: str
+ """Human-readable catalog display name."""
+
+ url: str
+ """Hosted MCP streamable HTTP endpoint."""
+
+ headers_refresh_ttl_ms: int | None = None
+ """Maximum dynamic-header cache lifetime in milliseconds."""
+
+ timeout: int | None = None
+ """Timeout in milliseconds for tool discovery and tool calls."""
+
+ tools: list[str] | None = None
+ """Tools to include. Defaults to all tools when omitted."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ManagedMCPServerConfig':
+ assert isinstance(obj, dict)
+ display_name = from_str(obj.get("displayName"))
+ url = from_str(obj.get("url"))
+ headers_refresh_ttl_ms = from_union([from_int, from_none], obj.get("headersRefreshTtlMs"))
+ timeout = from_union([from_int, from_none], obj.get("timeout"))
+ tools = from_union([lambda x: from_list(from_str, x), from_none], obj.get("tools"))
+ return ManagedMCPServerConfig(display_name, url, headers_refresh_ttl_ms, timeout, tools)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["displayName"] = from_str(self.display_name)
+ result["url"] = from_str(self.url)
+ if self.headers_refresh_ttl_ms is not None:
+ result["headersRefreshTtlMs"] = from_union([from_int, from_none], self.headers_refresh_ttl_ms)
+ if self.timeout is not None:
+ result["timeout"] = from_union([from_int, from_none], self.timeout)
+ if self.tools is not None:
+ result["tools"] = from_union([lambda x: from_list(from_str, x), from_none], self.tools)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ManagedSettingsReadResult:
@@ -5542,6 +5562,7 @@ def to_dict(self) -> dict:
return result
class MCPHeadersHandlePendingHeadersRefreshRequestKind(Enum):
+ ERROR = "error"
HEADERS = "headers"
NONE = "none"
@@ -8777,6 +8798,81 @@ def to_dict(self) -> dict:
result["force"] = from_union([from_bool, from_none], self.force)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+class ProtocolAppendMode(Enum):
+ """Append-mode discriminator. Omission also selects append mode."""
+
+ APPEND = "append"
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+class ProtocolCustomizeMode(Enum):
+ """Customize-mode discriminator."""
+
+ CUSTOMIZE = "customize"
+
+class Action(Enum):
+ PRESERVE = "preserve"
+ TRANSFORM = "transform"
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+class ProtocolReplaceMode(Enum):
+ """Replace-mode discriminator."""
+
+ REPLACE = "replace"
+
+class ProtocolSectionOverrideAction(Enum):
+ """Declarative operation applied to the section."""
+
+ APPEND = "append"
+ PREPEND = "prepend"
+ PRESERVE = "preserve"
+ REMOVE = "remove"
+ REPLACE = "replace"
+ TRANSFORM = "transform"
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+class ProtocolStaticSectionAction(Enum):
+ """Declarative operation applied to the section."""
+
+ APPEND = "append"
+ PREPEND = "prepend"
+ REMOVE = "remove"
+ REPLACE = "replace"
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class SystemMessageBlock:
+ content: str
+ """Text content for this system-message block."""
+
+ is_static: bool | None = None
+ """Whether the block is static and may be cached independently of dynamic prompt content."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'SystemMessageBlock':
+ assert isinstance(obj, dict)
+ content = from_str(obj.get("content"))
+ is_static = from_union([from_bool, from_none], obj.get("isStatic"))
+ return SystemMessageBlock(content, is_static)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["content"] = from_str(self.content)
+ if self.is_static is not None:
+ result["isStatic"] = from_union([from_bool, from_none], self.is_static)
+ return result
+
+class ProtocolMode(Enum):
+ """Append-mode discriminator. Omission also selects append mode.
+
+ Replace-mode discriminator.
+
+ Customize-mode discriminator.
+ """
+ APPEND = "append"
+ CUSTOMIZE = "customize"
+ REPLACE = "replace"
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ProviderAddResult:
@@ -9223,30 +9319,6 @@ def to_dict(self) -> dict:
result["hasPending"] = from_bool(self.has_pending)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class QueueFinishDeferredIdleDrainResult:
- """Action selected by the native deferred-idle drain."""
-
- aborted: bool
- """Whether the deferred idle was caused by an aborted foreground turn."""
-
- action: str
- """One of none, processQueue, or emitSessionIdle."""
-
- @staticmethod
- def from_dict(obj: Any) -> 'QueueFinishDeferredIdleDrainResult':
- assert isinstance(obj, dict)
- aborted = from_bool(obj.get("aborted"))
- action = from_str(obj.get("action"))
- return QueueFinishDeferredIdleDrainResult(aborted, action)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["aborted"] = from_bool(self.aborted)
- result["action"] = from_str(self.action)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class QueueHasPendingResult:
@@ -9645,47 +9717,6 @@ def to_dict(self) -> dict:
result["handle"] = from_str(self.handle)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class SessionsRegisterExtensionToolsOnSessionOptions:
- """Optional registration options."""
-
- # Internal: this field is an internal SDK API and is not part of the public surface.
- enabled: Any = None
- """In-process `() => boolean` gating callback used only by the CLI."""
-
- @staticmethod
- def from_dict(obj: Any) -> 'SessionsRegisterExtensionToolsOnSessionOptions':
- assert isinstance(obj, dict)
- enabled = obj.get("enabled")
- return SessionsRegisterExtensionToolsOnSessionOptions(enabled)
-
- def to_dict(self) -> dict:
- result: dict = {}
- if self.enabled is not None:
- result["enabled"] = self.enabled
- return result
-
-# Experimental: this type is part of an experimental API and may change or be removed.
-# Internal: this type is an internal SDK API and is not part of the public surface.
-@dataclass
-class _RegisterExtensionToolsResult:
- """Handle for releasing the extension tool registration."""
-
- unsubscribe: Any
- """In-process unsubscribe function used only by the CLI."""
-
- @staticmethod
- def from_dict(obj: Any) -> '_RegisterExtensionToolsResult':
- assert isinstance(obj, dict)
- unsubscribe = obj.get("unsubscribe")
- return _RegisterExtensionToolsResult(unsubscribe)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["unsubscribe"] = self.unsubscribe
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ReleaseEventInterestParams:
@@ -9968,6 +9999,9 @@ def to_dict(self) -> dict:
result["branch"] = from_union([from_str, from_none], self.branch)
return result
+class ResponseFormatType(Enum):
+ JSON_SCHEMA = "json_schema"
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class SandboxConfigAuth:
@@ -10065,14 +10099,12 @@ def to_dict(self) -> dict:
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class SandboxConfigUserPolicyNetworkProxy:
- """HTTP proxy for sandboxed process traffic. Linux restricts egress to the proxy endpoint,
- requires that endpoint to be reachable over IPv4 (the [::] dual-stack wildcard is
- accepted and routed through the IPv4 gateway), and does not support proxy credentials.
- macOS relies on applications honoring proxy environment variables. Windows also
- configures a per-AppContainer WinHTTP proxy, but enforcement depends on the application's
- networking stack. Configure supported credentials in the separate `username` and
- `password` fields. A credential-free http:// loopback URL uses the localhost proxy form,
- while an https:// or authenticated loopback URL uses the URL form.
+ """HTTP(S) proxy for sandboxed traffic. With host rules, this is the built-in local proxy's
+ upstream; credentials stay in the runtime, and Linux and macOS restrict the child to the
+ local listener. Without host rules, Linux restricts egress to this endpoint but rejects
+ credentials, and macOS proxying is cooperative. Windows enforcement depends on the
+ application's networking stack. Configure credentials in the separate username/password
+ fields. The transient local listener URL is never persisted.
HTTP proxy configuration for sandboxed traffic.
"""
@@ -10207,6 +10239,17 @@ def to_dict(self) -> dict:
result["reason"] = from_union([from_str, from_none], self.reason)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+class SandboxSessionChange(Enum):
+ """A session-scoped sandbox transition applied while handling a slash command
+
+ Present when the invocation changed the sandbox for this session only. Nothing was
+ persisted, so consumers must mirror the change onto the live session rather than
+ reloading settings, and must not treat it as a settings change.
+ """
+ DISABLED = "disabled"
+ RESTORED = "restored"
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ScheduleAddAtRequest:
@@ -10617,8 +10660,11 @@ class SendMessagesResult:
"""Result of sending zero or more user messages"""
message_ids: list[str]
- """Unique identifiers assigned to the messages, one per provided message in order. Empty
- when no messages were provided.
+ """Unique identifiers assigned to the messages, one per provided message in order. For a
+ batch that starts a run, assistant messages use the final ID as originatingMessageId
+ throughout that run, including tool iterations and stop-hook corrections. Immediate
+ steering does not replace the active run's origin. Empty when no messages were provided;
+ that run has no originatingMessageId.
"""
@staticmethod
@@ -14571,17 +14617,6 @@ def to_dict(self) -> dict:
result["response"] = from_union([lambda x: from_dict(lambda x: x, x), from_none], self.response)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-class UISessionLimitsExhaustedResponseAction(Enum):
- """Action selected by the user.
-
- User action selected for an exhausted session limit.
- """
- ADD = "add"
- CANCEL = "cancel"
- SET = "set"
- UNSET = "unset"
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class UIUserInputResponse:
@@ -16827,64 +16862,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 DiscoveredCanvas:
- """Canvas available in the current session."""
-
- canvas_id: str
- """Provider-local canvas identifier"""
-
- description: str
- """Short, single-sentence description shown to the agent in canvas catalogs."""
-
- display_name: str
- """Human-readable canvas name"""
-
- extension_id: str
- """Owning provider identifier"""
-
- actions: list[CanvasAction] | None = None
- """Actions the agent or host may invoke on an open instance"""
-
- extension_name: str | None = None
- """Owning extension display name, when available"""
-
- icon: str | None = None
- """Host-local PNG path for the canvas icon, when supplied"""
-
- input_schema: Any = None
- """JSON Schema for canvas open input"""
-
- @staticmethod
- def from_dict(obj: Any) -> 'DiscoveredCanvas':
- assert isinstance(obj, dict)
- canvas_id = from_str(obj.get("canvasId"))
- description = from_str(obj.get("description"))
- display_name = from_str(obj.get("displayName"))
- extension_id = from_str(obj.get("extensionId"))
- actions = from_union([lambda x: from_list(CanvasAction.from_dict, x), from_none], obj.get("actions"))
- extension_name = from_union([from_str, from_none], obj.get("extensionName"))
- icon = from_union([from_str, from_none], obj.get("icon"))
- input_schema = obj.get("inputSchema")
- return DiscoveredCanvas(canvas_id, description, display_name, extension_id, actions, extension_name, icon, input_schema)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["canvasId"] = from_str(self.canvas_id)
- result["description"] = from_str(self.description)
- result["displayName"] = from_str(self.display_name)
- result["extensionId"] = from_str(self.extension_id)
- if self.actions is not None:
- result["actions"] = from_union([lambda x: from_list(lambda x: to_class(CanvasAction, x), x), from_none], self.actions)
- if self.extension_name is not None:
- result["extensionName"] = from_union([from_str, from_none], self.extension_name)
- if self.icon is not None:
- result["icon"] = from_union([from_str, from_none], self.icon)
- if self.input_schema is not None:
- result["inputSchema"] = self.input_schema
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class OpenCanvasInstance:
@@ -17112,7 +17089,7 @@ def to_dict(self) -> dict:
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class DebugCollectLogsCollectedEntry:
- """A file included in the redacted debug bundle."""
+ """A file included in the session debug bundle."""
bundle_path: str
"""Relative path of the file in the staged bundle/archive."""
@@ -17141,10 +17118,10 @@ def to_dict(self) -> dict:
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class DebugCollectLogsDestination:
- """Destination for the redacted debug bundle.
+ """Destination for the session debug bundle.
- Where the redacted bundle should be written. Use `archive` to produce a .tgz, or
- `directory` to stage redacted files for caller-managed upload/post-processing.
+ Where the bundle should be written. Use `archive` to produce a .tgz, or `directory` to
+ stage files for caller-managed upload/post-processing.
"""
kind: DebugCollectLogsResultKind
"""Destination variant discriminator."""
@@ -17157,7 +17134,7 @@ class DebugCollectLogsDestination:
"""Absolute or server-relative path for the .tgz archive to create."""
output_directory: str | None = None
- """Directory where redacted files should be staged. The directory is created if needed."""
+ """Directory where files should be staged. The directory is created if needed."""
@staticmethod
def from_dict(obj: Any) -> 'DebugCollectLogsDestination':
@@ -17889,49 +17866,6 @@ def to_dict(self) -> dict:
result["type"] = self.type
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class SlashCommandTextResult:
- """Slash-command invocation result containing text output plus Markdown/ANSI rendering flags."""
-
- kind: ClassVar[str] = "text"
- """Text result discriminator"""
-
- text: str
- """Text output for the client to render"""
-
- markdown: bool | None = None
- """Whether text contains Markdown"""
-
- preserve_ansi: bool | None = None
- """Whether ANSI sequences should be preserved"""
-
- runtime_settings_changed: bool | None = None
- """True when the invocation mutated user runtime settings; consumers caching settings should
- refresh
- """
-
- @staticmethod
- def from_dict(obj: Any) -> 'SlashCommandTextResult':
- assert isinstance(obj, dict)
- text = from_str(obj.get("text"))
- markdown = from_union([from_bool, from_none], obj.get("markdown"))
- preserve_ansi = from_union([from_bool, from_none], obj.get("preserveAnsi"))
- runtime_settings_changed = from_union([from_bool, from_none], obj.get("runtimeSettingsChanged"))
- return SlashCommandTextResult(text, markdown, preserve_ansi, runtime_settings_changed)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["kind"] = self.kind
- result["text"] = from_str(self.text)
- if self.markdown is not None:
- result["markdown"] = from_union([from_bool, from_none], self.markdown)
- if self.preserve_ansi is not None:
- result["preserveAnsi"] = from_union([from_bool, from_none], self.preserve_ansi)
- if self.runtime_settings_changed is not None:
- result["runtimeSettingsChanged"] = from_union([from_bool, from_none], self.runtime_settings_changed)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class FactoryAgentRequest:
@@ -18165,40 +18099,6 @@ def to_dict(self) -> dict:
result["phaseId"] = from_union([from_none, from_str], self.phase_id)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class FactoryPauseCheckpointResult:
- action: FactoryPauseCheckpointAction
- """Whether this execution attempt must pause or may continue."""
-
- @staticmethod
- def from_dict(obj: Any) -> 'FactoryPauseCheckpointResult':
- assert isinstance(obj, dict)
- action = FactoryPauseCheckpointAction(obj.get("action"))
- return FactoryPauseCheckpointResult(action)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["action"] = to_enum(FactoryPauseCheckpointAction, self.action)
- return result
-
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class SessionFactoryPauseAtCheckpointResult:
- action: FactoryPauseCheckpointAction
- """Whether this execution attempt must pause or may continue."""
-
- @staticmethod
- def from_dict(obj: Any) -> 'SessionFactoryPauseAtCheckpointResult':
- assert isinstance(obj, dict)
- action = FactoryPauseCheckpointAction(obj.get("action"))
- return SessionFactoryPauseAtCheckpointResult(action)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["action"] = to_enum(FactoryPauseCheckpointAction, self.action)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class FactoryPhaseObservation:
@@ -19735,19 +19635,31 @@ class MCPHeadersHandlePendingHeadersRefreshRequest:
"""Headers to overlay onto the MCP request. Dynamic headers override static config headers
but do not replace SDK-managed request headers.
"""
+ ttl_ms: int | None = None
+ """Optional lifetime in milliseconds for these returned headers. The runtime clamps its
+ configured cache lifetime to this value.
+ """
+ message: str | None = None
+ """Host credential broker failure, denial, or revocation reason."""
@staticmethod
def from_dict(obj: Any) -> 'MCPHeadersHandlePendingHeadersRefreshRequest':
assert isinstance(obj, dict)
kind = MCPHeadersHandlePendingHeadersRefreshRequestKind(obj.get("kind"))
headers = from_union([lambda x: from_dict(from_str, x), from_none], obj.get("headers"))
- return MCPHeadersHandlePendingHeadersRefreshRequest(kind, headers)
+ ttl_ms = from_union([from_int, from_none], obj.get("ttlMs"))
+ message = from_union([from_str, from_none], obj.get("message"))
+ return MCPHeadersHandlePendingHeadersRefreshRequest(kind, headers, ttl_ms, message)
def to_dict(self) -> dict:
result: dict = {}
result["kind"] = to_enum(MCPHeadersHandlePendingHeadersRefreshRequestKind, self.kind)
if self.headers is not None:
result["headers"] = from_union([lambda x: from_dict(from_str, x), from_none], self.headers)
+ if self.ttl_ms is not None:
+ result["ttlMs"] = from_union([from_int, from_none], self.ttl_ms)
+ if self.message is not None:
+ result["message"] = from_union([from_str, from_none], self.message)
return result
# Experimental: this type is part of an experimental API and may change or be removed.
@@ -20529,92 +20441,6 @@ def to_dict(self) -> dict:
result["taskType"] = from_union([lambda x: to_enum(TaskType, x), from_none], self.task_type)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class ModeSetRequest:
- """Agent interaction mode to apply to the session."""
-
- mode: SessionMode
- """The session mode the agent is operating in"""
-
- compaction_decision: str | None = None
- """Explicit response to a model-switch compaction preflight."""
-
- expected_mode: SessionMode | None = None
- """Mode the session must currently be in for the change to apply. When set and the session
- is in a different mode the request is a no-op and reports status 'unchanged'.
- """
- inherit_plan_base_from_session_id: str | None = None
- """Session whose plan-mode base state should be inherited."""
-
- persist_plan_selection: bool | None = None
- """Whether the selected plan model should be persisted."""
-
- picker_settings_context: ModelPickerSettingsContext | None = None
- """Settings context used when persisting the selected plan model."""
-
- plan_context_tier: str | None = None
- """Context tier to use with the dedicated plan model."""
-
- plan_exit_action: str | None = None
- """Action to perform when leaving plan mode."""
-
- plan_model: str | None = None
- """Dedicated model to use in plan mode, when configured."""
-
- plan_model_configured: bool | None = None
- """Whether a dedicated plan model is configured."""
-
- plan_reasoning_effort: str | None = None
- """Reasoning effort to use with the dedicated plan model."""
-
- restore_plan_model: bool | None = None
- """Whether leaving plan mode should restore the session's previous model."""
-
- @staticmethod
- def from_dict(obj: Any) -> 'ModeSetRequest':
- assert isinstance(obj, dict)
- mode = SessionMode(obj.get("mode"))
- compaction_decision = from_union([from_str, from_none], obj.get("compactionDecision"))
- expected_mode = from_union([SessionMode, from_none], obj.get("expectedMode"))
- inherit_plan_base_from_session_id = from_union([from_str, from_none], obj.get("inheritPlanBaseFromSessionId"))
- persist_plan_selection = from_union([from_bool, from_none], obj.get("persistPlanSelection"))
- picker_settings_context = from_union([ModelPickerSettingsContext.from_dict, from_none], obj.get("pickerSettingsContext"))
- plan_context_tier = from_union([from_str, from_none], obj.get("planContextTier"))
- plan_exit_action = from_union([from_str, from_none], obj.get("planExitAction"))
- plan_model = from_union([from_str, from_none], obj.get("planModel"))
- plan_model_configured = from_union([from_bool, from_none], obj.get("planModelConfigured"))
- plan_reasoning_effort = from_union([from_str, from_none], obj.get("planReasoningEffort"))
- restore_plan_model = from_union([from_bool, from_none], obj.get("restorePlanModel"))
- return ModeSetRequest(mode, compaction_decision, expected_mode, inherit_plan_base_from_session_id, persist_plan_selection, picker_settings_context, plan_context_tier, plan_exit_action, plan_model, plan_model_configured, plan_reasoning_effort, restore_plan_model)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["mode"] = to_enum(SessionMode, self.mode)
- if self.compaction_decision is not None:
- result["compactionDecision"] = from_union([from_str, from_none], self.compaction_decision)
- if self.expected_mode is not None:
- result["expectedMode"] = from_union([lambda x: to_enum(SessionMode, x), from_none], self.expected_mode)
- if self.inherit_plan_base_from_session_id is not None:
- result["inheritPlanBaseFromSessionId"] = from_union([from_str, from_none], self.inherit_plan_base_from_session_id)
- if self.persist_plan_selection is not None:
- result["persistPlanSelection"] = from_union([from_bool, from_none], self.persist_plan_selection)
- if self.picker_settings_context is not None:
- result["pickerSettingsContext"] = from_union([lambda x: to_class(ModelPickerSettingsContext, x), from_none], self.picker_settings_context)
- if self.plan_context_tier is not None:
- result["planContextTier"] = from_union([from_str, from_none], self.plan_context_tier)
- if self.plan_exit_action is not None:
- result["planExitAction"] = from_union([from_str, from_none], self.plan_exit_action)
- if self.plan_model is not None:
- result["planModel"] = from_union([from_str, from_none], self.plan_model)
- if self.plan_model_configured is not None:
- result["planModelConfigured"] = from_union([from_bool, from_none], self.plan_model_configured)
- if self.plan_reasoning_effort is not None:
- result["planReasoningEffort"] = from_union([from_str, from_none], self.plan_reasoning_effort)
- if self.restore_plan_model is not None:
- result["restorePlanModel"] = from_union([from_bool, from_none], self.restore_plan_model)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ModelPickerPersistenceRequest:
@@ -22437,6 +22263,11 @@ class InstalledPluginInfo:
plugin is always present on disk, so `enabled` is its only meaningful state and it is
never "not installed".
"""
+ source: str | None = None
+ """Runtime-reported plugin provenance. Currently set to "builtin" only for plugins
+ registered through the trusted host built-in boundary; absent for installed, marketplace,
+ direct, and live plugins.
+ """
version: str | None = None
"""Installed version (when reported by the plugin manifest)"""
@@ -22448,8 +22279,9 @@ def from_dict(obj: Any) -> 'InstalledPluginInfo':
name = from_str(obj.get("name"))
direct_source_id = from_union([from_str, from_none], obj.get("directSourceId"))
installed_from = from_union([from_str, from_none], obj.get("installedFrom"))
+ source = from_union([from_str, from_none], obj.get("source"))
version = from_union([from_str, from_none], obj.get("version"))
- return InstalledPluginInfo(enabled, marketplace, name, direct_source_id, installed_from, version)
+ return InstalledPluginInfo(enabled, marketplace, name, direct_source_id, installed_from, source, version)
def to_dict(self) -> dict:
result: dict = {}
@@ -22460,6 +22292,8 @@ def to_dict(self) -> dict:
result["directSourceId"] = from_union([from_str, from_none], self.direct_source_id)
if self.installed_from is not None:
result["installedFrom"] = from_union([from_str, from_none], self.installed_from)
+ if self.source is not None:
+ result["source"] = from_union([from_str, from_none], self.source)
if self.version is not None:
result["version"] = from_union([from_str, from_none], self.version)
return result
@@ -22501,6 +22335,9 @@ class MCPServer:
"""Connection status: connected, failed, needs-auth, pending, disabled, stopped, or
not_configured
"""
+ display_name: str | None = None
+ """Human-readable display name supplied by a managed server catalog."""
+
error: str | None = None
"""Error message if the server failed to connect"""
@@ -22510,7 +22347,7 @@ class MCPServer:
configured.
"""
source: McpServerSource | None = None
- """Configuration source: user, workspace, plugin, or builtin"""
+ """Configuration source: user, workspace, plugin, builtin, or managed"""
source_plugin: str | None = None
"""Plugin name that provided this server, when source is plugin."""
@@ -22523,17 +22360,20 @@ def from_dict(obj: Any) -> 'MCPServer':
assert isinstance(obj, dict)
name = from_str(obj.get("name"))
status = McpServerStatus(obj.get("status"))
+ display_name = from_union([from_str, from_none], obj.get("displayName"))
error = from_union([from_str, from_none], obj.get("error"))
server_metadata = from_union([McpServerMetadata.from_dict, from_none], obj.get("serverMetadata"))
source = from_union([McpServerSource, from_none], obj.get("source"))
source_plugin = from_union([from_str, from_none], obj.get("sourcePlugin"))
source_plugin_version = from_union([from_str, from_none], obj.get("sourcePluginVersion"))
- return MCPServer(name, status, error, server_metadata, source, source_plugin, source_plugin_version)
+ return MCPServer(name, status, display_name, error, server_metadata, source, source_plugin, source_plugin_version)
def to_dict(self) -> dict:
result: dict = {}
result["name"] = from_str(self.name)
result["status"] = to_enum(McpServerStatus, self.status)
+ if self.display_name is not None:
+ result["displayName"] = from_union([from_str, from_none], self.display_name)
if self.error is not None:
result["error"] = from_union([from_str, from_none], self.error)
if self.server_metadata is not None:
@@ -22762,6 +22602,315 @@ def to_dict(self) -> dict:
result["name"] = from_str(self.name)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProtocolSystemMessageAppendConfig:
+ content: str | None = None
+ """Text appended to the standard system prompt."""
+
+ mode: ProtocolAppendMode | None = None
+ """Append-mode discriminator. Omission also selects append mode."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProtocolSystemMessageAppendConfig':
+ assert isinstance(obj, dict)
+ content = from_union([from_str, from_none], obj.get("content"))
+ mode = from_union([ProtocolAppendMode, from_none], obj.get("mode"))
+ return ProtocolSystemMessageAppendConfig(content, mode)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.content is not None:
+ result["content"] = from_union([from_str, from_none], self.content)
+ if self.mode is not None:
+ result["mode"] = from_union([lambda x: to_enum(ProtocolAppendMode, x), from_none], self.mode)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class CanvasAction:
+ """Canvas action that the agent or host can invoke. To discover the input schema for a
+ particular action, call the list_canvas_capabilities tool.
+ """
+ name: str
+ """Action name exposed by the canvas provider"""
+
+ description: str | None = None
+ """Description of the action"""
+
+ input_schema: Any = None
+ """JSON Schema for the action input"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'CanvasAction':
+ assert isinstance(obj, dict)
+ name = from_str(obj.get("name"))
+ description = from_union([from_str, from_none], obj.get("description"))
+ input_schema = obj.get("inputSchema")
+ return CanvasAction(name, description, input_schema)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["name"] = from_str(self.name)
+ if self.description is not None:
+ result["description"] = from_union([from_str, from_none], self.description)
+ if self.input_schema is not None:
+ result["inputSchema"] = self.input_schema
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class CanvasActionInvokeRequest:
+ """Canvas action invocation parameters."""
+
+ action_name: str
+ """Action name to invoke"""
+
+ instance_id: str
+ """Open canvas instance identifier"""
+
+ input: Any = None
+ """Action input"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'CanvasActionInvokeRequest':
+ assert isinstance(obj, dict)
+ action_name = from_str(obj.get("actionName"))
+ instance_id = from_str(obj.get("instanceId"))
+ input = obj.get("input")
+ return CanvasActionInvokeRequest(action_name, instance_id, input)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["actionName"] = from_str(self.action_name)
+ result["instanceId"] = from_str(self.instance_id)
+ if self.input is not None:
+ result["input"] = self.input
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+class FactoryPauseCheckpointAction(Enum):
+ """Action the runtime selected for a durable factory pause checkpoint.
+
+ Whether this execution attempt must pause or may continue.
+ """
+ CONTINUE = "continue"
+ PAUSE = "pause"
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ModeSetRequest:
+ """Agent interaction mode to apply to the session."""
+
+ mode: SessionMode
+ """The session mode the agent is operating in"""
+
+ compaction_decision: str | None = None
+ """Explicit response to a model-switch compaction preflight."""
+
+ expected_mode: SessionMode | None = None
+ """Mode the session must currently be in for the change to apply. When set and the session
+ is in a different mode the request is a no-op and reports status 'unchanged'.
+ """
+ inherit_plan_base_from_session_id: str | None = None
+ """Session whose plan-mode base state should be inherited."""
+
+ persist_plan_selection: bool | None = None
+ """Whether the selected plan model should be persisted."""
+
+ picker_settings_context: ModelPickerSettingsContext | None = None
+ """Settings context used when persisting the selected plan model."""
+
+ plan_context_tier: str | None = None
+ """Context tier to use with the dedicated plan model."""
+
+ plan_exit_action: str | None = None
+ """Action to perform when leaving plan mode."""
+
+ plan_model: str | None = None
+ """Dedicated model to use in plan mode, when configured."""
+
+ plan_model_configured: bool | None = None
+ """Whether a dedicated plan model is configured."""
+
+ plan_reasoning_effort: str | None = None
+ """Reasoning effort to use with the dedicated plan model."""
+
+ restore_plan_model: bool | None = None
+ """Whether leaving plan mode should restore the session's previous model."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ModeSetRequest':
+ assert isinstance(obj, dict)
+ mode = SessionMode(obj.get("mode"))
+ compaction_decision = from_union([from_str, from_none], obj.get("compactionDecision"))
+ expected_mode = from_union([SessionMode, from_none], obj.get("expectedMode"))
+ inherit_plan_base_from_session_id = from_union([from_str, from_none], obj.get("inheritPlanBaseFromSessionId"))
+ persist_plan_selection = from_union([from_bool, from_none], obj.get("persistPlanSelection"))
+ picker_settings_context = from_union([ModelPickerSettingsContext.from_dict, from_none], obj.get("pickerSettingsContext"))
+ plan_context_tier = from_union([from_str, from_none], obj.get("planContextTier"))
+ plan_exit_action = from_union([from_str, from_none], obj.get("planExitAction"))
+ plan_model = from_union([from_str, from_none], obj.get("planModel"))
+ plan_model_configured = from_union([from_bool, from_none], obj.get("planModelConfigured"))
+ plan_reasoning_effort = from_union([from_str, from_none], obj.get("planReasoningEffort"))
+ restore_plan_model = from_union([from_bool, from_none], obj.get("restorePlanModel"))
+ return ModeSetRequest(mode, compaction_decision, expected_mode, inherit_plan_base_from_session_id, persist_plan_selection, picker_settings_context, plan_context_tier, plan_exit_action, plan_model, plan_model_configured, plan_reasoning_effort, restore_plan_model)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["mode"] = to_enum(SessionMode, self.mode)
+ if self.compaction_decision is not None:
+ result["compactionDecision"] = from_union([from_str, from_none], self.compaction_decision)
+ if self.expected_mode is not None:
+ result["expectedMode"] = from_union([lambda x: to_enum(SessionMode, x), from_none], self.expected_mode)
+ if self.inherit_plan_base_from_session_id is not None:
+ result["inheritPlanBaseFromSessionId"] = from_union([from_str, from_none], self.inherit_plan_base_from_session_id)
+ if self.persist_plan_selection is not None:
+ result["persistPlanSelection"] = from_union([from_bool, from_none], self.persist_plan_selection)
+ if self.picker_settings_context is not None:
+ result["pickerSettingsContext"] = from_union([lambda x: to_class(ModelPickerSettingsContext, x), from_none], self.picker_settings_context)
+ if self.plan_context_tier is not None:
+ result["planContextTier"] = from_union([from_str, from_none], self.plan_context_tier)
+ if self.plan_exit_action is not None:
+ result["planExitAction"] = from_union([from_str, from_none], self.plan_exit_action)
+ if self.plan_model is not None:
+ result["planModel"] = from_union([from_str, from_none], self.plan_model)
+ if self.plan_model_configured is not None:
+ result["planModelConfigured"] = from_union([from_bool, from_none], self.plan_model_configured)
+ if self.plan_reasoning_effort is not None:
+ result["planReasoningEffort"] = from_union([from_str, from_none], self.plan_reasoning_effort)
+ if self.restore_plan_model is not None:
+ result["restorePlanModel"] = from_union([from_bool, from_none], self.restore_plan_model)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProtocolMarkerSectionOverride:
+ action: Action
+ """Section override action discriminator."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProtocolMarkerSectionOverride':
+ assert isinstance(obj, dict)
+ action = Action(obj.get("action"))
+ return ProtocolMarkerSectionOverride(action)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["action"] = to_enum(Action, self.action)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class QueueFinishDeferredIdleDrainResult:
+ """Action selected by the native deferred-idle drain."""
+
+ aborted: bool
+ """Whether the deferred idle was caused by an aborted foreground turn."""
+
+ action: str
+ """One of none, processQueue, or emitSessionIdle."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'QueueFinishDeferredIdleDrainResult':
+ assert isinstance(obj, dict)
+ aborted = from_bool(obj.get("aborted"))
+ action = from_str(obj.get("action"))
+ return QueueFinishDeferredIdleDrainResult(aborted, action)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["aborted"] = from_bool(self.aborted)
+ result["action"] = from_str(self.action)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+class UISessionLimitsExhaustedResponseAction(Enum):
+ """Action selected by the user.
+
+ User action selected for an exhausted session limit.
+ """
+ ADD = "add"
+ CANCEL = "cancel"
+ SET = "set"
+ UNSET = "unset"
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProtocolSectionOverride:
+ action: ProtocolSectionOverrideAction
+ """Declarative operation applied to the section.
+
+ Section override action discriminator.
+ """
+ content: str | None = None
+ """Optional content used by replace, append, and prepend operations."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProtocolSectionOverride':
+ assert isinstance(obj, dict)
+ action = ProtocolSectionOverrideAction(obj.get("action"))
+ content = from_union([from_str, from_none], obj.get("content"))
+ return ProtocolSectionOverride(action, content)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["action"] = to_enum(ProtocolSectionOverrideAction, self.action)
+ if self.content is not None:
+ result["content"] = from_union([from_str, from_none], self.content)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProtocolStaticSectionOverride:
+ action: ProtocolStaticSectionAction
+ """Declarative operation applied to the section."""
+
+ content: str | None = None
+ """Optional content used by replace, append, and prepend operations."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProtocolStaticSectionOverride':
+ assert isinstance(obj, dict)
+ action = ProtocolStaticSectionAction(obj.get("action"))
+ content = from_union([from_str, from_none], obj.get("content"))
+ return ProtocolStaticSectionOverride(action, content)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["action"] = to_enum(ProtocolStaticSectionAction, self.action)
+ if self.content is not None:
+ result["content"] = from_union([from_str, from_none], self.content)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProtocolSystemMessageReplaceConfig:
+ content: str
+ """Complete replacement system-message text."""
+
+ mode: ProtocolReplaceMode
+ """Replace-mode discriminator."""
+
+ content_blocks: list[SystemMessageBlock] | None = None
+ """Optional structured blocks corresponding to the replacement content."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProtocolSystemMessageReplaceConfig':
+ assert isinstance(obj, dict)
+ content = from_str(obj.get("content"))
+ mode = ProtocolReplaceMode(obj.get("mode"))
+ content_blocks = from_union([lambda x: from_list(SystemMessageBlock.from_dict, x), from_none], obj.get("contentBlocks"))
+ return ProtocolSystemMessageReplaceConfig(content, mode, content_blocks)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["content"] = from_str(self.content)
+ result["mode"] = to_enum(ProtocolReplaceMode, self.mode)
+ if self.content_blocks is not None:
+ result["contentBlocks"] = from_union([lambda x: from_list(lambda x: to_class(SystemMessageBlock, x), x), from_none], self.content_blocks)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ProviderEndpoint:
@@ -23380,116 +23529,6 @@ def to_dict(self) -> dict:
result["wait"] = from_union([from_bool, from_none], self.wait)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class SendRequest:
- """Parameters for sending a user message to the session"""
-
- prompt: str
- """The user message text"""
-
- agent_mode: SendAgentMode | None = None
- """The UI mode the agent was in when this message was sent. Defaults to the session's
- current mode.
- """
- attachments: list[Attachment] | None = None
- """Optional attachments (files, directories, selections, blobs, GitHub references) to
- include with the message
- """
- billable: bool | None = None
- """If false, this message will not trigger a Premium Request Unit charge. User messages
- default to billable.
- """
- display_prompt: str | None = None
- """If provided, this is shown in the timeline instead of `prompt`"""
-
- mode: SendMode | None = None
- """How to deliver the message. `enqueue` (default) appends to the message queue. `immediate`
- interjects during an in-progress turn.
- """
- prepend: bool | None = None
- """If true, adds the message to the front of the queue instead of the end"""
-
- request_headers: dict[str, str] | None = None
- """Custom HTTP headers to include in outbound model requests for this turn. Merged with
- session-level provider headers; per-turn headers augment and overwrite session-level
- headers with the same key.
- """
- required_tool: str | None = None
- """If set, the request will fail if the named tool is not available when this message is
- among the user messages at the start of the current exchange
- """
- # Internal: this field is an internal SDK API and is not part of the public surface.
- source: str | None = None
- """Optional provenance tag copied to the resulting user.message event. Must be `user`,
- `system`, `command-` for command-originated messages, `schedule-`
- for scheduled prompts, or `agent-` for prompts sent by another agent.
- """
- traceparent: str | None = None
- """W3C Trace Context traceparent header for distributed tracing of this agent turn"""
-
- tracestate: str | None = None
- """W3C Trace Context tracestate header for distributed tracing"""
-
- wait: bool | None = None
- """If true, await completion of the agentic loop for this message before returning. Defaults
- to false (fire-and-forget). When true, the result still contains the same `messageId`;
- the caller can rely on the agent having processed the message before the call resolves.
- Transport-dependent tail semantics: on a LOCAL (in-process) session the wait additionally
- blocks until the completed turn's event tail has been dispatched to this session's
- in-process subscribers, so a subsequent read of subscriber state already reflects the
- turn; on a REMOTE session the wait resolves once the loop completes and mirrored delivery
- follows over the wire. Callers that need the stronger local guarantee on remote sessions
- should await the event stream explicitly.
- """
-
- @staticmethod
- def from_dict(obj: Any) -> 'SendRequest':
- assert isinstance(obj, dict)
- prompt = from_str(obj.get("prompt"))
- agent_mode = from_union([SendAgentMode, from_none], obj.get("agentMode"))
- attachments = from_union([lambda x: from_list(Attachment.from_dict, x), from_none], obj.get("attachments"))
- billable = from_union([from_bool, from_none], obj.get("billable"))
- display_prompt = from_union([from_str, from_none], obj.get("displayPrompt"))
- mode = from_union([SendMode, from_none], obj.get("mode"))
- prepend = from_union([from_bool, from_none], obj.get("prepend"))
- request_headers = from_union([lambda x: from_dict(from_str, x), from_none], obj.get("requestHeaders"))
- required_tool = from_union([from_str, from_none], obj.get("requiredTool"))
- source = from_union([from_str, from_none], obj.get("source"))
- traceparent = from_union([from_str, from_none], obj.get("traceparent"))
- tracestate = from_union([from_str, from_none], obj.get("tracestate"))
- wait = from_union([from_bool, from_none], obj.get("wait"))
- return SendRequest(prompt, agent_mode, attachments, billable, display_prompt, mode, prepend, request_headers, required_tool, source, traceparent, tracestate, wait)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["prompt"] = from_str(self.prompt)
- if self.agent_mode is not None:
- result["agentMode"] = from_union([lambda x: to_enum(SendAgentMode, x), from_none], self.agent_mode)
- if self.attachments is not None:
- result["attachments"] = from_union([lambda x: from_list(lambda x: to_class(Attachment, x), x), from_none], self.attachments)
- if self.billable is not None:
- result["billable"] = from_union([from_bool, from_none], self.billable)
- if self.display_prompt is not None:
- result["displayPrompt"] = from_union([from_str, from_none], self.display_prompt)
- if self.mode is not None:
- result["mode"] = from_union([lambda x: to_enum(SendMode, x), from_none], self.mode)
- if self.prepend is not None:
- result["prepend"] = from_union([from_bool, from_none], self.prepend)
- if self.request_headers is not None:
- result["requestHeaders"] = from_union([lambda x: from_dict(from_str, x), from_none], self.request_headers)
- if self.required_tool is not None:
- result["requiredTool"] = from_union([from_str, from_none], self.required_tool)
- if self.source is not None:
- result["source"] = from_union([from_str, from_none], self.source)
- if self.traceparent is not None:
- result["traceparent"] = from_union([from_str, from_none], self.traceparent)
- if self.tracestate is not None:
- result["tracestate"] = from_union([from_str, from_none], self.tracestate)
- if self.wait is not None:
- result["wait"] = from_union([from_bool, from_none], self.wait)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class QueuePendingItems:
@@ -23536,38 +23575,6 @@ def to_dict(self) -> dict:
result["messageId"] = from_union([from_str, from_none], self.message_id)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-# Internal: this type is an internal SDK API and is not part of the public surface.
-@dataclass
-class _RegisterExtensionToolsParams:
- """Params to attach an extension loader's tools to a session."""
-
- loader: Any
- """In-process ExtensionLoader handle used only by the CLI and excluded from the public SDK
- surface.
- """
- session_id: str
- """Session to register extension tools on."""
-
- options: SessionsRegisterExtensionToolsOnSessionOptions | None = None
- """Optional registration options."""
-
- @staticmethod
- def from_dict(obj: Any) -> '_RegisterExtensionToolsParams':
- assert isinstance(obj, dict)
- loader = obj.get("loader")
- session_id = from_str(obj.get("sessionId"))
- options = from_union([SessionsRegisterExtensionToolsOnSessionOptions.from_dict, from_none], obj.get("options"))
- return _RegisterExtensionToolsParams(loader, session_id, options)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["loader"] = self.loader
- result["sessionId"] = from_str(self.session_id)
- if self.options is not None:
- result["options"] = from_union([lambda x: to_class(SessionsRegisterExtensionToolsOnSessionOptions, x), from_none], self.options)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class RemoteControlConfig:
@@ -23761,6 +23768,43 @@ def to_dict(self) -> dict:
result["mode"] = from_union([lambda x: to_enum(RemoteSessionMode, x), from_none], self.mode)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ResponseFormat:
+ """Provider-native structured output format. JSON Schema is forwarded without rewriting or
+ validating the schema or the generated output.
+
+ Provider-native output format for the whole turn, including an empty message batch and
+ all tool-call iterations. Not inherited by later turns or subagents. Ordinary steering
+ inherits the active format; specifying responseFormat with mode: immediate is an error,
+ even while idle. Returned assistant content remains text; the runtime does not parse or
+ validate it. Unsupported models or schemas produce provider errors.
+
+ Provider-native output format for this turn, including all tool-call iterations. Not
+ inherited by later turns or subagents. Ordinary steering inherits the active format;
+ specifying responseFormat with mode: immediate is an error, even while idle. Returned
+ assistant content remains text; the runtime does not parse or validate it. Unsupported
+ models or schemas produce provider errors.
+ """
+ json_schema: JSONSchemaResponseFormat
+ """JSON Schema and provider options for the turn's output."""
+
+ type: ResponseFormatType
+ """Output format discriminator. Currently only json_schema is supported."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ResponseFormat':
+ assert isinstance(obj, dict)
+ json_schema = JSONSchemaResponseFormat.from_dict(obj.get("jsonSchema"))
+ type = ResponseFormatType(obj.get("type"))
+ return ResponseFormat(json_schema, type)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["jsonSchema"] = to_class(JSONSchemaResponseFormat, self.json_schema)
+ result["type"] = to_enum(ResponseFormatType, self.type)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class SandboxConfigUserPolicyExperimental:
@@ -23789,41 +23833,107 @@ def to_dict(self) -> dict:
class SandboxConfigUserPolicyNetwork:
"""Network rules to merge into the base policy."""
+ allowed_hosts: list[str] | None = None
+ """Hosts allowed through the built-in sandbox proxy. A non-empty list denies unmatched
+ hosts; an absent or empty list allows all hosts not blocked. Supports exact hostnames, IP
+ addresses, and *.example.com for strict subdomains. Host rules do not override the
+ outbound or local-network toggles.
+ """
allow_local_network: bool | None = None
"""Whether traffic to local/loopback addresses is allowed."""
allow_outbound: bool | None = None
"""Whether outbound network traffic is allowed at all."""
+ blocked_hosts: list[str] | None = None
+ """Hosts denied by the built-in sandbox proxy. Deny rules take precedence over allowedHosts.
+ A domain also denies all its subdomains. IP addresses match exactly; *.example.com
+ matches strict subdomains, and * denies every host.
+ """
proxy: SandboxConfigUserPolicyNetworkProxy | None = None
- """HTTP proxy for sandboxed process traffic. Linux restricts egress to the proxy endpoint,
- requires that endpoint to be reachable over IPv4 (the [::] dual-stack wildcard is
- accepted and routed through the IPv4 gateway), and does not support proxy credentials.
- macOS relies on applications honoring proxy environment variables. Windows also
- configures a per-AppContainer WinHTTP proxy, but enforcement depends on the application's
- networking stack. Configure supported credentials in the separate `username` and
- `password` fields. A credential-free http:// loopback URL uses the localhost proxy form,
- while an https:// or authenticated loopback URL uses the URL form.
+ """HTTP(S) proxy for sandboxed traffic. With host rules, this is the built-in local proxy's
+ upstream; credentials stay in the runtime, and Linux and macOS restrict the child to the
+ local listener. Without host rules, Linux restricts egress to this endpoint but rejects
+ credentials, and macOS proxying is cooperative. Windows enforcement depends on the
+ application's networking stack. Configure credentials in the separate username/password
+ fields. The transient local listener URL is never persisted.
"""
@staticmethod
def from_dict(obj: Any) -> 'SandboxConfigUserPolicyNetwork':
assert isinstance(obj, dict)
+ allowed_hosts = from_union([lambda x: from_list(from_str, x), from_none], obj.get("allowedHosts"))
allow_local_network = from_union([from_bool, from_none], obj.get("allowLocalNetwork"))
allow_outbound = from_union([from_bool, from_none], obj.get("allowOutbound"))
+ blocked_hosts = from_union([lambda x: from_list(from_str, x), from_none], obj.get("blockedHosts"))
proxy = from_union([SandboxConfigUserPolicyNetworkProxy.from_dict, from_none], obj.get("proxy"))
- return SandboxConfigUserPolicyNetwork(allow_local_network, allow_outbound, proxy)
+ return SandboxConfigUserPolicyNetwork(allowed_hosts, allow_local_network, allow_outbound, blocked_hosts, proxy)
def to_dict(self) -> dict:
result: dict = {}
+ if self.allowed_hosts is not None:
+ result["allowedHosts"] = from_union([lambda x: from_list(from_str, x), from_none], self.allowed_hosts)
if self.allow_local_network is not None:
result["allowLocalNetwork"] = from_union([from_bool, from_none], self.allow_local_network)
if self.allow_outbound is not None:
result["allowOutbound"] = from_union([from_bool, from_none], self.allow_outbound)
+ if self.blocked_hosts is not None:
+ result["blockedHosts"] = from_union([lambda x: from_list(from_str, x), from_none], self.blocked_hosts)
if self.proxy is not None:
result["proxy"] = from_union([lambda x: to_class(SandboxConfigUserPolicyNetworkProxy, x), from_none], self.proxy)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class SlashCommandTextResult:
+ """Slash-command invocation result containing text output plus Markdown/ANSI rendering flags."""
+
+ kind: ClassVar[str] = "text"
+ """Text result discriminator"""
+
+ text: str
+ """Text output for the client to render"""
+
+ markdown: bool | None = None
+ """Whether text contains Markdown"""
+
+ preserve_ansi: bool | None = None
+ """Whether ANSI sequences should be preserved"""
+
+ runtime_settings_changed: bool | None = None
+ """True when the invocation mutated user runtime settings; consumers caching settings should
+ refresh
+ """
+ sandbox_session_change: SandboxSessionChange | None = None
+ """Present when the invocation changed the sandbox for this session only. Nothing was
+ persisted, so consumers must mirror the change onto the live session rather than
+ reloading settings, and must not treat it as a settings change.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'SlashCommandTextResult':
+ assert isinstance(obj, dict)
+ text = from_str(obj.get("text"))
+ markdown = from_union([from_bool, from_none], obj.get("markdown"))
+ preserve_ansi = from_union([from_bool, from_none], obj.get("preserveAnsi"))
+ runtime_settings_changed = from_union([from_bool, from_none], obj.get("runtimeSettingsChanged"))
+ sandbox_session_change = from_union([SandboxSessionChange, from_none], obj.get("sandboxSessionChange"))
+ return SlashCommandTextResult(text, markdown, preserve_ansi, runtime_settings_changed, sandbox_session_change)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["kind"] = self.kind
+ result["text"] = from_str(self.text)
+ if self.markdown is not None:
+ result["markdown"] = from_union([from_bool, from_none], self.markdown)
+ if self.preserve_ansi is not None:
+ result["preserveAnsi"] = from_union([from_bool, from_none], self.preserve_ansi)
+ if self.runtime_settings_changed is not None:
+ result["runtimeSettingsChanged"] = from_union([from_bool, from_none], self.runtime_settings_changed)
+ if self.sandbox_session_change is not None:
+ result["sandboxSessionChange"] = from_union([lambda x: to_enum(SandboxSessionChange, x), from_none], self.sandbox_session_change)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ScheduleAddResult:
@@ -23889,83 +23999,6 @@ def to_dict(self) -> dict:
result["entry"] = from_union([lambda x: to_class(ScheduleEntry, x), from_none], self.entry)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class SendMessagesRequest:
- """Parameters for sending zero or more user messages to the session in a single turn.
- Remote-backed (Mission Control) sessions do not support this method and will return an
- error.
- """
- messages: list[SendMessageItem]
- """The user messages to append to the conversation, in order. May be empty, in which case a
- single turn runs over the existing history with no new user message.
- """
- agent_mode: SendAgentMode | None = None
- """The UI mode the agent was in when these messages were sent. Defaults to the session's
- current mode.
- """
- mode: SendMode | None = None
- """How to deliver the messages. `enqueue` (default) appends to the message queue.
- `immediate` interjects during an in-progress turn.
- """
- prepend: bool | None = None
- """If true, adds the messages to the front of the queue instead of the end"""
-
- request_headers: dict[str, str] | None = None
- """Custom HTTP headers to include in outbound model requests for this turn. Merged with
- session-level provider headers; per-turn headers augment and overwrite session-level
- headers with the same key.
- """
- traceparent: str | None = None
- """W3C Trace Context traceparent header for distributed tracing of this agent turn"""
-
- tracestate: str | None = None
- """W3C Trace Context tracestate header for distributed tracing"""
-
- wait: bool | None = None
- """If true, await completion of the agentic loop for this turn before returning. Defaults to
- false (fire-and-forget). When true, the result still contains the same `messageIds`; the
- caller can rely on the agent having processed the messages before the call resolves.
- Transport-dependent tail semantics: on a LOCAL (in-process) session the wait additionally
- blocks until the completed turn's event tail has been dispatched to this session's
- in-process subscribers, so a subsequent read of subscriber state already reflects the
- turn; on a REMOTE session the wait resolves once the loop completes and mirrored delivery
- follows over the wire. Callers that need the stronger local guarantee on remote sessions
- should await the event stream explicitly.
- """
-
- @staticmethod
- def from_dict(obj: Any) -> 'SendMessagesRequest':
- assert isinstance(obj, dict)
- messages = from_list(SendMessageItem.from_dict, obj.get("messages"))
- agent_mode = from_union([SendAgentMode, from_none], obj.get("agentMode"))
- mode = from_union([SendMode, from_none], obj.get("mode"))
- prepend = from_union([from_bool, from_none], obj.get("prepend"))
- request_headers = from_union([lambda x: from_dict(from_str, x), from_none], obj.get("requestHeaders"))
- traceparent = from_union([from_str, from_none], obj.get("traceparent"))
- tracestate = from_union([from_str, from_none], obj.get("tracestate"))
- wait = from_union([from_bool, from_none], obj.get("wait"))
- return SendMessagesRequest(messages, agent_mode, mode, prepend, request_headers, traceparent, tracestate, wait)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["messages"] = from_list(lambda x: to_class(SendMessageItem, x), self.messages)
- if self.agent_mode is not None:
- result["agentMode"] = from_union([lambda x: to_enum(SendAgentMode, x), from_none], self.agent_mode)
- if self.mode is not None:
- result["mode"] = from_union([lambda x: to_enum(SendMode, x), from_none], self.mode)
- if self.prepend is not None:
- result["prepend"] = from_union([from_bool, from_none], self.prepend)
- if self.request_headers is not None:
- result["requestHeaders"] = from_union([lambda x: from_dict(from_str, x), from_none], self.request_headers)
- if self.traceparent is not None:
- result["traceparent"] = from_union([from_str, from_none], self.traceparent)
- if self.tracestate is not None:
- result["tracestate"] = from_union([from_str, from_none], self.tracestate)
- if self.wait is not None:
- result["wait"] = from_union([from_bool, from_none], self.wait)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ServerSkillList:
@@ -26379,39 +26412,6 @@ def to_dict(self) -> dict:
result["selectedAction"] = from_union([lambda x: to_enum(UIExitPlanModeAction, x), from_none], self.selected_action)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class UISessionLimitsExhaustedResponse:
- """The selected session-limit action.
-
- The user's selected action for an exhausted session limit.
- """
- action: UISessionLimitsExhaustedResponseAction
- """Action selected by the user."""
-
- additional_ai_credits: float | None = None
- """AI Credits to add to the current max when action is 'add'."""
-
- max_ai_credits: float | None = None
- """New absolute max AI Credits when action is 'set'."""
-
- @staticmethod
- def from_dict(obj: Any) -> 'UISessionLimitsExhaustedResponse':
- assert isinstance(obj, dict)
- action = UISessionLimitsExhaustedResponseAction(obj.get("action"))
- additional_ai_credits = from_union([from_float, from_none], obj.get("additionalAiCredits"))
- max_ai_credits = from_union([from_float, from_none], obj.get("maxAiCredits"))
- return UISessionLimitsExhaustedResponse(action, additional_ai_credits, max_ai_credits)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["action"] = to_enum(UISessionLimitsExhaustedResponseAction, self.action)
- if self.additional_ai_credits is not None:
- result["additionalAiCredits"] = from_union([to_float, from_none], self.additional_ai_credits)
- if self.max_ai_credits is not None:
- result["maxAiCredits"] = from_union([to_float, from_none], self.max_ai_credits)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class UIHandlePendingUserInputRequest:
@@ -27063,25 +27063,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 CanvasList:
- """Declared canvases available in this session."""
-
- canvases: list[DiscoveredCanvas]
- """Declared canvases available in this session"""
-
- @staticmethod
- def from_dict(obj: Any) -> 'CanvasList':
- assert isinstance(obj, dict)
- canvases = from_list(DiscoveredCanvas.from_dict, obj.get("canvases"))
- return CanvasList(canvases)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["canvases"] = from_list(lambda x: to_class(DiscoveredCanvas, x), self.canvases)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class CanvasListOpenResult:
@@ -27355,10 +27336,10 @@ def to_dict(self) -> dict:
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class DebugCollectLogsResult:
- """Result of collecting a redacted debug bundle."""
+ """Result of collecting a session debug bundle."""
entries: list[DebugCollectLogsCollectedEntry]
- """Files included in the redacted bundle."""
+ """Files included in the bundle."""
kind: DebugCollectLogsResultKind
"""Destination kind that was written."""
@@ -28906,8 +28887,10 @@ class DebugCollectLogsEntry:
"""Server-local source path to read."""
redaction: DebugCollectLogsRedaction | None = None
- """How text content from this entry should be redacted. Defaults to plain-text."""
-
+ """How text content from this entry should be redacted. Defaults to plain-text. With none,
+ no redaction is applied; the caller must ensure any necessary redaction is performed
+ before this call.
+ """
required: bool | None = None
"""When true, collection fails if this entry cannot be read. Defaults to false, which
records the entry in `skippedEntries`.
@@ -29424,6 +29407,211 @@ def to_dict(self) -> dict:
result["results"] = from_list(lambda x: to_class(PluginUpdateAllEntry, x), self.results)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class DiscoveredCanvas:
+ """Canvas available in the current session."""
+
+ canvas_id: str
+ """Provider-local canvas identifier"""
+
+ description: str
+ """Short, single-sentence description shown to the agent in canvas catalogs."""
+
+ display_name: str
+ """Human-readable canvas name"""
+
+ extension_id: str
+ """Owning provider identifier"""
+
+ actions: list[CanvasAction] | None = None
+ """Actions the agent or host may invoke on an open instance"""
+
+ extension_name: str | None = None
+ """Owning extension display name, when available"""
+
+ icon: str | None = None
+ """Host-local PNG path for the canvas icon, when supplied"""
+
+ input_schema: Any = None
+ """JSON Schema for canvas open input"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'DiscoveredCanvas':
+ assert isinstance(obj, dict)
+ canvas_id = from_str(obj.get("canvasId"))
+ description = from_str(obj.get("description"))
+ display_name = from_str(obj.get("displayName"))
+ extension_id = from_str(obj.get("extensionId"))
+ actions = from_union([lambda x: from_list(CanvasAction.from_dict, x), from_none], obj.get("actions"))
+ extension_name = from_union([from_str, from_none], obj.get("extensionName"))
+ icon = from_union([from_str, from_none], obj.get("icon"))
+ input_schema = obj.get("inputSchema")
+ return DiscoveredCanvas(canvas_id, description, display_name, extension_id, actions, extension_name, icon, input_schema)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["canvasId"] = from_str(self.canvas_id)
+ result["description"] = from_str(self.description)
+ result["displayName"] = from_str(self.display_name)
+ result["extensionId"] = from_str(self.extension_id)
+ if self.actions is not None:
+ result["actions"] = from_union([lambda x: from_list(lambda x: to_class(CanvasAction, x), x), from_none], self.actions)
+ if self.extension_name is not None:
+ result["extensionName"] = from_union([from_str, from_none], self.extension_name)
+ if self.icon is not None:
+ result["icon"] = from_union([from_str, from_none], self.icon)
+ if self.input_schema is not None:
+ result["inputSchema"] = self.input_schema
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class FactoryPauseCheckpointResult:
+ action: FactoryPauseCheckpointAction
+ """Whether this execution attempt must pause or may continue."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'FactoryPauseCheckpointResult':
+ assert isinstance(obj, dict)
+ action = FactoryPauseCheckpointAction(obj.get("action"))
+ return FactoryPauseCheckpointResult(action)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["action"] = to_enum(FactoryPauseCheckpointAction, self.action)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class SessionFactoryPauseAtCheckpointResult:
+ action: FactoryPauseCheckpointAction
+ """Whether this execution attempt must pause or may continue."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'SessionFactoryPauseAtCheckpointResult':
+ assert isinstance(obj, dict)
+ action = FactoryPauseCheckpointAction(obj.get("action"))
+ return SessionFactoryPauseAtCheckpointResult(action)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["action"] = to_enum(FactoryPauseCheckpointAction, self.action)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class UISessionLimitsExhaustedResponse:
+ """The selected session-limit action.
+
+ The user's selected action for an exhausted session limit.
+ """
+ action: UISessionLimitsExhaustedResponseAction
+ """Action selected by the user."""
+
+ additional_ai_credits: float | None = None
+ """AI Credits to add to the current max when action is 'add'."""
+
+ max_ai_credits: float | None = None
+ """New absolute max AI Credits when action is 'set'."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'UISessionLimitsExhaustedResponse':
+ assert isinstance(obj, dict)
+ action = UISessionLimitsExhaustedResponseAction(obj.get("action"))
+ additional_ai_credits = from_union([from_float, from_none], obj.get("additionalAiCredits"))
+ max_ai_credits = from_union([from_float, from_none], obj.get("maxAiCredits"))
+ return UISessionLimitsExhaustedResponse(action, additional_ai_credits, max_ai_credits)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["action"] = to_enum(UISessionLimitsExhaustedResponseAction, self.action)
+ if self.additional_ai_credits is not None:
+ result["additionalAiCredits"] = from_union([to_float, from_none], self.additional_ai_credits)
+ if self.max_ai_credits is not None:
+ result["maxAiCredits"] = from_union([to_float, from_none], self.max_ai_credits)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProtocolSystemMessageConfig:
+ """System-message configuration used when the runtime builds the standard prompt for this
+ provider-qualified model, including general-purpose subagents. It uses the same object
+ hierarchy as session-level systemMessage configuration, except transform actions are
+ rejected because the current callback protocol is not model-scoped. When present, it
+ overrides the session-wide configuration on those prompt paths. Selected custom-agent and
+ specialized-subagent prompts remain authoritative.
+ """
+ content: str | None = None
+ """Text appended to the standard system prompt.
+
+ Complete replacement system-message text.
+
+ Text appended after the customized sections.
+ """
+ mode: ProtocolMode | None = None
+ """Append-mode discriminator. Omission also selects append mode.
+
+ Replace-mode discriminator.
+
+ Customize-mode discriminator.
+ """
+ content_blocks: list[SystemMessageBlock] | None = None
+ """Optional structured blocks corresponding to the replacement content."""
+
+ sections: dict[str, ProtocolSectionOverride] | None = None
+ """Named standard-prompt section overrides."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProtocolSystemMessageConfig':
+ assert isinstance(obj, dict)
+ content = from_union([from_str, from_none], obj.get("content"))
+ mode = from_union([ProtocolMode, from_none], obj.get("mode"))
+ content_blocks = from_union([lambda x: from_list(SystemMessageBlock.from_dict, x), from_none], obj.get("contentBlocks"))
+ sections = from_union([lambda x: from_dict(ProtocolSectionOverride.from_dict, x), from_none], obj.get("sections"))
+ return ProtocolSystemMessageConfig(content, mode, content_blocks, sections)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.content is not None:
+ result["content"] = from_union([from_str, from_none], self.content)
+ if self.mode is not None:
+ result["mode"] = from_union([lambda x: to_enum(ProtocolMode, x), from_none], self.mode)
+ if self.content_blocks is not None:
+ result["contentBlocks"] = from_union([lambda x: from_list(lambda x: to_class(SystemMessageBlock, x), x), from_none], self.content_blocks)
+ if self.sections is not None:
+ result["sections"] = from_union([lambda x: from_dict(lambda x: to_class(ProtocolSectionOverride, x), x), from_none], self.sections)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProtocolSystemMessageCustomizeConfig:
+ mode: ProtocolCustomizeMode
+ """Customize-mode discriminator."""
+
+ content: str | None = None
+ """Text appended after the customized sections."""
+
+ sections: dict[str, ProtocolSectionOverride] | None = None
+ """Named standard-prompt section overrides."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProtocolSystemMessageCustomizeConfig':
+ assert isinstance(obj, dict)
+ mode = ProtocolCustomizeMode(obj.get("mode"))
+ content = from_union([from_str, from_none], obj.get("content"))
+ sections = from_union([lambda x: from_dict(ProtocolSectionOverride.from_dict, x), from_none], obj.get("sections"))
+ return ProtocolSystemMessageCustomizeConfig(mode, content, sections)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["mode"] = to_enum(ProtocolCustomizeMode, self.mode)
+ if self.content is not None:
+ result["content"] = from_union([from_str, from_none], self.content)
+ if self.sections is not None:
+ result["sections"] = from_union([lambda x: from_dict(lambda x: to_class(ProtocolSectionOverride, x), x), from_none], self.sections)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class PushAttachmentGitHubFileDiff:
@@ -29649,6 +29837,216 @@ 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 SendMessagesRequest:
+ """Parameters for sending zero or more user messages to the session in a single turn.
+ Remote-backed (Mission Control) sessions do not support this method and will return an
+ error.
+ """
+ messages: list[SendMessageItem]
+ """The user messages to append to the conversation, in order, before running one agent loop.
+ When the batch starts a run, its final message is the primary initiating message; earlier
+ messages provide context, not separate runs or replies. May be empty, in which case a
+ single turn runs over the existing history with no new user message or
+ originatingMessageId.
+ """
+ agent_mode: SendAgentMode | None = None
+ """The UI mode the agent was in when these messages were sent. Defaults to the session's
+ current mode.
+ """
+ mode: SendMode | None = None
+ """How to deliver the messages. `enqueue` (default) appends to the message queue.
+ `immediate` interjects during an in-progress turn.
+ """
+ prepend: bool | None = None
+ """If true, adds the messages to the front of the queue instead of the end"""
+
+ request_headers: dict[str, str] | None = None
+ """Custom HTTP headers to include in outbound model requests for this turn. Merged with
+ session-level provider headers; per-turn headers augment and overwrite session-level
+ headers with the same key.
+ """
+ response_format: ResponseFormat | None = None
+ """Provider-native output format for the whole turn, including an empty message batch and
+ all tool-call iterations. Not inherited by later turns or subagents. Ordinary steering
+ inherits the active format; specifying responseFormat with mode: immediate is an error,
+ even while idle. Returned assistant content remains text; the runtime does not parse or
+ validate it. Unsupported models or schemas produce provider errors.
+ """
+ traceparent: str | None = None
+ """W3C Trace Context traceparent header for distributed tracing of this agent turn"""
+
+ tracestate: str | None = None
+ """W3C Trace Context tracestate header for distributed tracing"""
+
+ wait: bool | None = None
+ """If true, await completion of the agentic loop for this turn before returning. Defaults to
+ false (fire-and-forget). When true, the result still contains the same `messageIds`; the
+ caller can rely on the agent having processed the messages before the call resolves.
+ Transport-dependent tail semantics: on a LOCAL (in-process) session the wait additionally
+ blocks until the completed turn's event tail has been dispatched to this session's
+ in-process subscribers, so a subsequent read of subscriber state already reflects the
+ turn; on a REMOTE session the wait resolves once the loop completes and mirrored delivery
+ follows over the wire. Callers that need the stronger local guarantee on remote sessions
+ should await the event stream explicitly.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'SendMessagesRequest':
+ assert isinstance(obj, dict)
+ messages = from_list(SendMessageItem.from_dict, obj.get("messages"))
+ agent_mode = from_union([SendAgentMode, from_none], obj.get("agentMode"))
+ mode = from_union([SendMode, from_none], obj.get("mode"))
+ prepend = from_union([from_bool, from_none], obj.get("prepend"))
+ request_headers = from_union([lambda x: from_dict(from_str, x), from_none], obj.get("requestHeaders"))
+ response_format = from_union([ResponseFormat.from_dict, from_none], obj.get("responseFormat"))
+ traceparent = from_union([from_str, from_none], obj.get("traceparent"))
+ tracestate = from_union([from_str, from_none], obj.get("tracestate"))
+ wait = from_union([from_bool, from_none], obj.get("wait"))
+ return SendMessagesRequest(messages, agent_mode, mode, prepend, request_headers, response_format, traceparent, tracestate, wait)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["messages"] = from_list(lambda x: to_class(SendMessageItem, x), self.messages)
+ if self.agent_mode is not None:
+ result["agentMode"] = from_union([lambda x: to_enum(SendAgentMode, x), from_none], self.agent_mode)
+ if self.mode is not None:
+ result["mode"] = from_union([lambda x: to_enum(SendMode, x), from_none], self.mode)
+ if self.prepend is not None:
+ result["prepend"] = from_union([from_bool, from_none], self.prepend)
+ if self.request_headers is not None:
+ result["requestHeaders"] = from_union([lambda x: from_dict(from_str, x), from_none], self.request_headers)
+ if self.response_format is not None:
+ result["responseFormat"] = from_union([lambda x: to_class(ResponseFormat, x), from_none], self.response_format)
+ if self.traceparent is not None:
+ result["traceparent"] = from_union([from_str, from_none], self.traceparent)
+ if self.tracestate is not None:
+ result["tracestate"] = from_union([from_str, from_none], self.tracestate)
+ if self.wait is not None:
+ result["wait"] = from_union([from_bool, from_none], self.wait)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class SendRequest:
+ """Parameters for sending a user message to the session"""
+
+ prompt: str
+ """The user message text"""
+
+ agent_mode: SendAgentMode | None = None
+ """The UI mode the agent was in when this message was sent. Defaults to the session's
+ current mode.
+ """
+ attachments: list[Attachment] | None = None
+ """Optional attachments (files, directories, selections, blobs, GitHub references) to
+ include with the message
+ """
+ billable: bool | None = None
+ """If false, this message will not trigger a Premium Request Unit charge. User messages
+ default to billable.
+ """
+ display_prompt: str | None = None
+ """If provided, this is shown in the timeline instead of `prompt`"""
+
+ mode: SendMode | None = None
+ """How to deliver the message. `enqueue` (default) appends to the message queue. `immediate`
+ interjects during an in-progress turn.
+ """
+ prepend: bool | None = None
+ """If true, adds the message to the front of the queue instead of the end"""
+
+ request_headers: dict[str, str] | None = None
+ """Custom HTTP headers to include in outbound model requests for this turn. Merged with
+ session-level provider headers; per-turn headers augment and overwrite session-level
+ headers with the same key.
+ """
+ required_tool: str | None = None
+ """If set, the request will fail if the named tool is not available when this message is
+ among the user messages at the start of the current exchange
+ """
+ response_format: ResponseFormat | None = None
+ """Provider-native output format for this turn, including all tool-call iterations. Not
+ inherited by later turns or subagents. Ordinary steering inherits the active format;
+ specifying responseFormat with mode: immediate is an error, even while idle. Returned
+ assistant content remains text; the runtime does not parse or validate it. Unsupported
+ models or schemas produce provider errors.
+ """
+ # Internal: this field is an internal SDK API and is not part of the public surface.
+ source: str | None = None
+ """Optional provenance tag copied to the resulting user.message event. Must be `user`,
+ `system`, `command-` for command-originated messages, `schedule-`
+ for scheduled prompts, or `agent-` for prompts sent by another agent.
+ """
+ traceparent: str | None = None
+ """W3C Trace Context traceparent header for distributed tracing of this agent turn"""
+
+ tracestate: str | None = None
+ """W3C Trace Context tracestate header for distributed tracing"""
+
+ wait: bool | None = None
+ """If true, await completion of the agentic loop for this message before returning. Defaults
+ to false (fire-and-forget). When true, the result still contains the same `messageId`;
+ the caller can rely on the agent having processed the message before the call resolves.
+ Transport-dependent tail semantics: on a LOCAL (in-process) session the wait additionally
+ blocks until the completed turn's event tail has been dispatched to this session's
+ in-process subscribers, so a subsequent read of subscriber state already reflects the
+ turn; on a REMOTE session the wait resolves once the loop completes and mirrored delivery
+ follows over the wire. Callers that need the stronger local guarantee on remote sessions
+ should await the event stream explicitly.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'SendRequest':
+ assert isinstance(obj, dict)
+ prompt = from_str(obj.get("prompt"))
+ agent_mode = from_union([SendAgentMode, from_none], obj.get("agentMode"))
+ attachments = from_union([lambda x: from_list(Attachment.from_dict, x), from_none], obj.get("attachments"))
+ billable = from_union([from_bool, from_none], obj.get("billable"))
+ display_prompt = from_union([from_str, from_none], obj.get("displayPrompt"))
+ mode = from_union([SendMode, from_none], obj.get("mode"))
+ prepend = from_union([from_bool, from_none], obj.get("prepend"))
+ request_headers = from_union([lambda x: from_dict(from_str, x), from_none], obj.get("requestHeaders"))
+ required_tool = from_union([from_str, from_none], obj.get("requiredTool"))
+ response_format = from_union([ResponseFormat.from_dict, from_none], obj.get("responseFormat"))
+ source = from_union([from_str, from_none], obj.get("source"))
+ traceparent = from_union([from_str, from_none], obj.get("traceparent"))
+ tracestate = from_union([from_str, from_none], obj.get("tracestate"))
+ wait = from_union([from_bool, from_none], obj.get("wait"))
+ return SendRequest(prompt, agent_mode, attachments, billable, display_prompt, mode, prepend, request_headers, required_tool, response_format, source, traceparent, tracestate, wait)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["prompt"] = from_str(self.prompt)
+ if self.agent_mode is not None:
+ result["agentMode"] = from_union([lambda x: to_enum(SendAgentMode, x), from_none], self.agent_mode)
+ if self.attachments is not None:
+ result["attachments"] = from_union([lambda x: from_list(lambda x: to_class(Attachment, x), x), from_none], self.attachments)
+ if self.billable is not None:
+ result["billable"] = from_union([from_bool, from_none], self.billable)
+ if self.display_prompt is not None:
+ result["displayPrompt"] = from_union([from_str, from_none], self.display_prompt)
+ if self.mode is not None:
+ result["mode"] = from_union([lambda x: to_enum(SendMode, x), from_none], self.mode)
+ if self.prepend is not None:
+ result["prepend"] = from_union([from_bool, from_none], self.prepend)
+ if self.request_headers is not None:
+ result["requestHeaders"] = from_union([lambda x: from_dict(from_str, x), from_none], self.request_headers)
+ if self.required_tool is not None:
+ result["requiredTool"] = from_union([from_str, from_none], self.required_tool)
+ if self.response_format is not None:
+ result["responseFormat"] = from_union([lambda x: to_class(ResponseFormat, x), from_none], self.response_format)
+ if self.source is not None:
+ result["source"] = from_union([from_str, from_none], self.source)
+ if self.traceparent is not None:
+ result["traceparent"] = from_union([from_str, from_none], self.traceparent)
+ if self.tracestate is not None:
+ result["tracestate"] = from_union([from_str, from_none], self.tracestate)
+ if self.wait is not None:
+ result["wait"] = from_union([from_bool, from_none], self.wait)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class SandboxConfigUserPolicy:
@@ -31267,31 +31665,6 @@ def to_dict(self) -> dict:
result["response"] = to_class(UIExitPlanModeResponse, self.response)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class UIHandlePendingSessionLimitsExhaustedRequest:
- """Request ID of a pending `session_limits_exhausted.requested` event and the user's
- selected limit action.
- """
- request_id: str
- """The unique request ID from the session_limits_exhausted.requested event"""
-
- response: UISessionLimitsExhaustedResponse
- """The selected session-limit action."""
-
- @staticmethod
- def from_dict(obj: Any) -> 'UIHandlePendingSessionLimitsExhaustedRequest':
- assert isinstance(obj, dict)
- request_id = from_str(obj.get("requestId"))
- response = UISessionLimitsExhaustedResponse.from_dict(obj.get("response"))
- return UIHandlePendingSessionLimitsExhaustedRequest(request_id, response)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["requestId"] = from_str(self.request_id)
- result["response"] = to_class(UISessionLimitsExhaustedResponse, self.response)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class UsageMetricsAgentMetric:
@@ -32161,11 +32534,11 @@ def to_dict(self) -> dict:
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class DebugCollectLogsRequest:
- """Options for collecting a redacted session debug bundle."""
+ """Options for collecting a session debug bundle with configurable redaction."""
destination: DebugCollectLogsDestination
- """Where the redacted bundle should be written. Use `archive` to produce a .tgz, or
- `directory` to stage redacted files for caller-managed upload/post-processing.
+ """Where the bundle should be written. Use `archive` to produce a .tgz, or `directory` to
+ stage files for caller-managed upload/post-processing.
"""
additional_entries: list[DebugCollectLogsEntry] | None = None
"""Caller-provided server-local files or directories to include in addition to the runtime's
@@ -32238,6 +32611,286 @@ def to_dict(self) -> dict:
result["error"] = from_union([lambda x: to_class(SessionFSError, x), from_none], self.error)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProviderConfig:
+ """Custom model-provider configuration (BYOK)."""
+
+ base_url: str
+ """API endpoint URL."""
+
+ api_key: str | None = None
+ """API key. Optional for local providers like Ollama."""
+
+ azure: ProviderConfigAzure | None = None
+ """Azure-specific provider options."""
+
+ bearer_token: str | None = None
+ """Bearer token for authentication. Sets the Authorization header directly. Takes precedence
+ over apiKey when both are set.
+ """
+ has_bearer_token_provider: bool | None = None
+ """When true, the SDK client supplies bearer tokens on demand: the runtime calls the
+ client-session `providerToken.getToken` callback before each request and applies the
+ returned token as an `Authorization: Bearer ` header. This is the bearer/OAuth
+ scheme used by Azure AD / managed-identity tokens and provider OAuth access tokens
+ (including Anthropic's), not a provider-specific API-key header such as Anthropic's
+ `x-api-key`. The token-acquiring function itself stays on the SDK side and is never
+ serialized; only this flag crosses the wire. When set alongside `apiKey`/`bearerToken`,
+ the callback takes precedence: the runtime applies the token returned by
+ `providerToken.getToken` as the `Authorization: Bearer` header for each request and does
+ not send the static credential.
+ """
+ headers: dict[str, str] | None = None
+ """Custom HTTP headers to include in all outbound requests to the provider."""
+
+ max_context_window_tokens: float | None = None
+ """Maximum context window tokens for the model."""
+
+ max_output_tokens: float | None = None
+ """Maximum output tokens for the model."""
+
+ max_prompt_tokens: float | None = None
+ """Maximum prompt/input tokens for the model."""
+
+ model_capabilities: ModelCapabilitiesOverride | None = None
+ """Overrides for model capabilities when they cannot be inferred from modelId."""
+
+ model_id: str | None = None
+ """Well-known model ID used for capability lookup. When set, agent behavior config and token
+ limits are inferred from this model.
+ """
+ provider_name: str | None = None
+ """Provider name used for model and telemetry attribution."""
+
+ transport: ProviderTransport | None = None
+ """Provider transport. Defaults to "http"."""
+
+ type: ProviderType | None = None
+ """Provider type. Defaults to "openai" for generic OpenAI-compatible APIs."""
+
+ wire_api: ProviderWireAPI | None = None
+ """Wire API format (openai/azure only). Defaults to "completions"."""
+
+ wire_model: str | None = None
+ """The model identifier sent to the provider API for inference (the "wire" model), as
+ opposed to modelId which is the well-known base.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProviderConfig':
+ assert isinstance(obj, dict)
+ base_url = from_str(obj.get("baseUrl"))
+ api_key = from_union([from_str, from_none], obj.get("apiKey"))
+ azure = from_union([ProviderConfigAzure.from_dict, from_none], obj.get("azure"))
+ bearer_token = from_union([from_str, from_none], obj.get("bearerToken"))
+ has_bearer_token_provider = from_union([from_bool, from_none], obj.get("hasBearerTokenProvider"))
+ headers = from_union([lambda x: from_dict(from_str, x), from_none], obj.get("headers"))
+ max_context_window_tokens = from_union([from_float, from_none], obj.get("maxContextWindowTokens"))
+ max_output_tokens = from_union([from_float, from_none], obj.get("maxOutputTokens"))
+ max_prompt_tokens = from_union([from_float, from_none], obj.get("maxPromptTokens"))
+ model_capabilities = from_union([ModelCapabilitiesOverride.from_dict, from_none], obj.get("modelCapabilities"))
+ model_id = from_union([from_str, from_none], obj.get("modelId"))
+ provider_name = from_union([from_str, from_none], obj.get("providerName"))
+ transport = from_union([ProviderTransport, from_none], obj.get("transport"))
+ type = from_union([ProviderType, from_none], obj.get("type"))
+ wire_api = from_union([ProviderWireAPI, from_none], obj.get("wireApi"))
+ wire_model = from_union([from_str, from_none], obj.get("wireModel"))
+ return ProviderConfig(base_url, api_key, azure, bearer_token, has_bearer_token_provider, headers, max_context_window_tokens, max_output_tokens, max_prompt_tokens, model_capabilities, model_id, provider_name, transport, type, wire_api, wire_model)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["baseUrl"] = from_str(self.base_url)
+ if self.api_key is not None:
+ result["apiKey"] = from_union([from_str, from_none], self.api_key)
+ if self.azure is not None:
+ result["azure"] = from_union([lambda x: to_class(ProviderConfigAzure, x), from_none], self.azure)
+ if self.bearer_token is not None:
+ result["bearerToken"] = from_union([from_str, from_none], self.bearer_token)
+ if self.has_bearer_token_provider is not None:
+ result["hasBearerTokenProvider"] = from_union([from_bool, from_none], self.has_bearer_token_provider)
+ if self.headers is not None:
+ result["headers"] = from_union([lambda x: from_dict(from_str, x), from_none], self.headers)
+ if self.max_context_window_tokens is not None:
+ result["maxContextWindowTokens"] = from_union([to_float, from_none], self.max_context_window_tokens)
+ if self.max_output_tokens is not None:
+ result["maxOutputTokens"] = from_union([to_float, from_none], self.max_output_tokens)
+ if self.max_prompt_tokens is not None:
+ result["maxPromptTokens"] = from_union([to_float, from_none], self.max_prompt_tokens)
+ if self.model_capabilities is not None:
+ result["modelCapabilities"] = from_union([lambda x: to_class(ModelCapabilitiesOverride, x), from_none], self.model_capabilities)
+ if self.model_id is not None:
+ result["modelId"] = from_union([from_str, from_none], self.model_id)
+ if self.provider_name is not None:
+ result["providerName"] = from_union([from_str, from_none], self.provider_name)
+ if self.transport is not None:
+ result["transport"] = from_union([lambda x: to_enum(ProviderTransport, x), from_none], self.transport)
+ if self.type is not None:
+ result["type"] = from_union([lambda x: to_enum(ProviderType, x), from_none], self.type)
+ if self.wire_api is not None:
+ result["wireApi"] = from_union([lambda x: to_enum(ProviderWireAPI, x), from_none], self.wire_api)
+ if self.wire_model is not None:
+ result["wireModel"] = from_union([from_str, from_none], self.wire_model)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class PermissionsConfigureParams:
+ """Patch of permission policy fields to apply (omit a field to leave it unchanged)."""
+
+ additional_content_exclusion_policies: list[PermissionsConfigureAdditionalContentExclusionPolicy] | None = None
+ """If specified, replaces the host-supplied GitHub Content Exclusion policies on the session
+ (combined with natively-discovered policies when evaluating tool/file access). Omit to
+ leave the current policies unchanged.
+ """
+ approve_all_read_permission_requests: bool | None = None
+ """If specified, sets whether path/URL read permission requests are auto-approved. Omit to
+ leave the current value unchanged.
+ """
+ approve_all_tool_permission_requests: bool | None = None
+ """If specified, sets whether tool permission requests are auto-approved without prompting.
+ Omit to leave the current value unchanged.
+ """
+ paths: PermissionPathsConfig | None = None
+ """If specified, replaces the session's path-permission policy. The runtime constructs the
+ appropriate PathManager based on these inputs (rooted at the session's working
+ directory). Omit to leave the current path policy unchanged.
+ """
+ rules: PermissionRulesSet | None = None
+ """If specified, replaces the session's approved/denied permission rules. Omit to leave the
+ current rules unchanged.
+ """
+ urls: PermissionUrlsConfig | None = None
+ """If specified, replaces the session's URL-permission policy. The runtime constructs a
+ fresh DefaultUrlManager based on these inputs. Omit to leave the current URL policy
+ unchanged.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'PermissionsConfigureParams':
+ assert isinstance(obj, dict)
+ additional_content_exclusion_policies = from_union([lambda x: from_list(PermissionsConfigureAdditionalContentExclusionPolicy.from_dict, x), from_none], obj.get("additionalContentExclusionPolicies"))
+ approve_all_read_permission_requests = from_union([from_bool, from_none], obj.get("approveAllReadPermissionRequests"))
+ approve_all_tool_permission_requests = from_union([from_bool, from_none], obj.get("approveAllToolPermissionRequests"))
+ paths = from_union([PermissionPathsConfig.from_dict, from_none], obj.get("paths"))
+ rules = from_union([PermissionRulesSet.from_dict, from_none], obj.get("rules"))
+ urls = from_union([PermissionUrlsConfig.from_dict, from_none], obj.get("urls"))
+ return PermissionsConfigureParams(additional_content_exclusion_policies, approve_all_read_permission_requests, approve_all_tool_permission_requests, paths, rules, urls)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.additional_content_exclusion_policies is not None:
+ result["additionalContentExclusionPolicies"] = from_union([lambda x: from_list(lambda x: to_class(PermissionsConfigureAdditionalContentExclusionPolicy, x), x), from_none], self.additional_content_exclusion_policies)
+ if self.approve_all_read_permission_requests is not None:
+ result["approveAllReadPermissionRequests"] = from_union([from_bool, from_none], self.approve_all_read_permission_requests)
+ if self.approve_all_tool_permission_requests is not None:
+ result["approveAllToolPermissionRequests"] = from_union([from_bool, from_none], self.approve_all_tool_permission_requests)
+ if self.paths is not None:
+ result["paths"] = from_union([lambda x: to_class(PermissionPathsConfig, x), from_none], self.paths)
+ if self.rules is not None:
+ result["rules"] = from_union([lambda x: to_class(PermissionRulesSet, x), from_none], self.rules)
+ if self.urls is not None:
+ result["urls"] = from_union([lambda x: to_class(PermissionUrlsConfig, x), from_none], self.urls)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class DiscoveredMCPServer:
+ """MCP server discovered by `mcp.discover`, with config source, optional plugin source,
+ transport type, and enabled state.
+ """
+ enabled: bool
+ """Whether the server is enabled (not in the disabled list)"""
+
+ name: str
+ """Server name (config key)"""
+
+ source: McpServerSource
+ """Configuration source: user, workspace, plugin, or builtin"""
+
+ effective_source: MCPSourceRef | None = None
+ """Canonical identity and location of the effective server declaration."""
+
+ source_plugin: str | None = None
+ """Plugin name that provided this server, when source is plugin."""
+
+ source_plugin_version: str | None = None
+ """Plugin version that provided this server, when source is plugin."""
+
+ type: DiscoveredMCPServerType | None = None
+ """Server transport type: stdio, http, sse (deprecated), or memory"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'DiscoveredMCPServer':
+ assert isinstance(obj, dict)
+ enabled = from_bool(obj.get("enabled"))
+ name = from_str(obj.get("name"))
+ source = McpServerSource(obj.get("source"))
+ effective_source = from_union([MCPSourceRef.from_dict, from_none], obj.get("effectiveSource"))
+ source_plugin = from_union([from_str, from_none], obj.get("sourcePlugin"))
+ source_plugin_version = from_union([from_str, from_none], obj.get("sourcePluginVersion"))
+ type = from_union([DiscoveredMCPServerType, from_none], obj.get("type"))
+ return DiscoveredMCPServer(enabled, name, source, effective_source, source_plugin, source_plugin_version, type)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["enabled"] = from_bool(self.enabled)
+ result["name"] = from_str(self.name)
+ result["source"] = to_enum(McpServerSource, self.source)
+ if self.effective_source is not None:
+ result["effectiveSource"] = from_union([lambda x: to_class(MCPSourceRef, x), from_none], self.effective_source)
+ if self.source_plugin is not None:
+ result["sourcePlugin"] = from_union([from_str, from_none], self.source_plugin)
+ if self.source_plugin_version is not None:
+ result["sourcePluginVersion"] = from_union([from_str, from_none], self.source_plugin_version)
+ if self.type is not None:
+ result["type"] = from_union([lambda x: to_enum(DiscoveredMCPServerType, x), from_none], self.type)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class CanvasList:
+ """Declared canvases available in this session."""
+
+ canvases: list[DiscoveredCanvas]
+ """Declared canvases available in this session"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'CanvasList':
+ assert isinstance(obj, dict)
+ canvases = from_list(DiscoveredCanvas.from_dict, obj.get("canvases"))
+ return CanvasList(canvases)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["canvases"] = from_list(lambda x: to_class(DiscoveredCanvas, x), self.canvases)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class UIHandlePendingSessionLimitsExhaustedRequest:
+ """Request ID of a pending `session_limits_exhausted.requested` event and the user's
+ selected limit action.
+ """
+ request_id: str
+ """The unique request ID from the session_limits_exhausted.requested event"""
+
+ response: UISessionLimitsExhaustedResponse
+ """The selected session-limit action."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'UIHandlePendingSessionLimitsExhaustedRequest':
+ assert isinstance(obj, dict)
+ request_id = from_str(obj.get("requestId"))
+ response = UISessionLimitsExhaustedResponse.from_dict(obj.get("response"))
+ return UIHandlePendingSessionLimitsExhaustedRequest(request_id, response)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["requestId"] = from_str(self.request_id)
+ result["response"] = to_class(UISessionLimitsExhaustedResponse, self.response)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ProviderModelConfig:
@@ -32269,6 +32922,14 @@ class ProviderModelConfig:
"""Display name for model pickers. Defaults to the provider-qualified selection id
(`provider/id`).
"""
+ system_message: ProtocolSystemMessageConfig | None = None
+ """System-message configuration used when the runtime builds the standard prompt for this
+ provider-qualified model, including general-purpose subagents. It uses the same object
+ hierarchy as session-level systemMessage configuration, except transform actions are
+ rejected because the current callback protocol is not model-scoped. When present, it
+ overrides the session-wide configuration on those prompt paths. Selected custom-agent and
+ specialized-subagent prompts remain authoritative.
+ """
wire_model: str | None = None
"""The model name sent to the provider API for inference. Defaults to `id`."""
@@ -32283,8 +32944,9 @@ def from_dict(obj: Any) -> 'ProviderModelConfig':
max_prompt_tokens = from_union([from_float, from_none], obj.get("maxPromptTokens"))
model_id = from_union([from_str, from_none], obj.get("modelId"))
name = from_union([from_str, from_none], obj.get("name"))
+ system_message = from_union([ProtocolSystemMessageConfig.from_dict, from_none], obj.get("systemMessage"))
wire_model = from_union([from_str, from_none], obj.get("wireModel"))
- return ProviderModelConfig(id, provider, capabilities, max_context_window_tokens, max_output_tokens, max_prompt_tokens, model_id, name, wire_model)
+ return ProviderModelConfig(id, provider, capabilities, max_context_window_tokens, max_output_tokens, max_prompt_tokens, model_id, name, system_message, wire_model)
def to_dict(self) -> dict:
result: dict = {}
@@ -32302,246 +32964,12 @@ def to_dict(self) -> dict:
result["modelId"] = from_union([from_str, from_none], self.model_id)
if self.name is not None:
result["name"] = from_union([from_str, from_none], self.name)
+ if self.system_message is not None:
+ result["systemMessage"] = from_union([lambda x: to_class(ProtocolSystemMessageConfig, x), from_none], self.system_message)
if self.wire_model is not None:
result["wireModel"] = from_union([from_str, from_none], self.wire_model)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class ProviderConfig:
- """Custom model-provider configuration (BYOK)."""
-
- base_url: str
- """API endpoint URL."""
-
- api_key: str | None = None
- """API key. Optional for local providers like Ollama."""
-
- azure: ProviderConfigAzure | None = None
- """Azure-specific provider options."""
-
- bearer_token: str | None = None
- """Bearer token for authentication. Sets the Authorization header directly. Takes precedence
- over apiKey when both are set.
- """
- has_bearer_token_provider: bool | None = None
- """When true, the SDK client supplies bearer tokens on demand: the runtime calls the
- client-session `providerToken.getToken` callback before each request and applies the
- returned token as an `Authorization: Bearer ` header. This is the bearer/OAuth
- scheme used by Azure AD / managed-identity tokens and provider OAuth access tokens
- (including Anthropic's), not a provider-specific API-key header such as Anthropic's
- `x-api-key`. The token-acquiring function itself stays on the SDK side and is never
- serialized; only this flag crosses the wire. When set alongside `apiKey`/`bearerToken`,
- the callback takes precedence: the runtime applies the token returned by
- `providerToken.getToken` as the `Authorization: Bearer` header for each request and does
- not send the static credential.
- """
- headers: dict[str, str] | None = None
- """Custom HTTP headers to include in all outbound requests to the provider."""
-
- max_context_window_tokens: float | None = None
- """Maximum context window tokens for the model."""
-
- max_output_tokens: float | None = None
- """Maximum output tokens for the model."""
-
- max_prompt_tokens: float | None = None
- """Maximum prompt/input tokens for the model."""
-
- model_capabilities: ModelCapabilitiesOverride | None = None
- """Overrides for model capabilities when they cannot be inferred from modelId."""
-
- model_id: str | None = None
- """Well-known model ID used for capability lookup. When set, agent behavior config and token
- limits are inferred from this model.
- """
- provider_name: str | None = None
- """Provider name used for model and telemetry attribution."""
-
- transport: ProviderTransport | None = None
- """Provider transport. Defaults to "http"."""
-
- type: ProviderType | None = None
- """Provider type. Defaults to "openai" for generic OpenAI-compatible APIs."""
-
- wire_api: ProviderWireAPI | None = None
- """Wire API format (openai/azure only). Defaults to "completions"."""
-
- wire_model: str | None = None
- """The model identifier sent to the provider API for inference (the "wire" model), as
- opposed to modelId which is the well-known base.
- """
-
- @staticmethod
- def from_dict(obj: Any) -> 'ProviderConfig':
- assert isinstance(obj, dict)
- base_url = from_str(obj.get("baseUrl"))
- api_key = from_union([from_str, from_none], obj.get("apiKey"))
- azure = from_union([ProviderConfigAzure.from_dict, from_none], obj.get("azure"))
- bearer_token = from_union([from_str, from_none], obj.get("bearerToken"))
- has_bearer_token_provider = from_union([from_bool, from_none], obj.get("hasBearerTokenProvider"))
- headers = from_union([lambda x: from_dict(from_str, x), from_none], obj.get("headers"))
- max_context_window_tokens = from_union([from_float, from_none], obj.get("maxContextWindowTokens"))
- max_output_tokens = from_union([from_float, from_none], obj.get("maxOutputTokens"))
- max_prompt_tokens = from_union([from_float, from_none], obj.get("maxPromptTokens"))
- model_capabilities = from_union([ModelCapabilitiesOverride.from_dict, from_none], obj.get("modelCapabilities"))
- model_id = from_union([from_str, from_none], obj.get("modelId"))
- provider_name = from_union([from_str, from_none], obj.get("providerName"))
- transport = from_union([ProviderTransport, from_none], obj.get("transport"))
- type = from_union([ProviderType, from_none], obj.get("type"))
- wire_api = from_union([ProviderWireAPI, from_none], obj.get("wireApi"))
- wire_model = from_union([from_str, from_none], obj.get("wireModel"))
- return ProviderConfig(base_url, api_key, azure, bearer_token, has_bearer_token_provider, headers, max_context_window_tokens, max_output_tokens, max_prompt_tokens, model_capabilities, model_id, provider_name, transport, type, wire_api, wire_model)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["baseUrl"] = from_str(self.base_url)
- if self.api_key is not None:
- result["apiKey"] = from_union([from_str, from_none], self.api_key)
- if self.azure is not None:
- result["azure"] = from_union([lambda x: to_class(ProviderConfigAzure, x), from_none], self.azure)
- if self.bearer_token is not None:
- result["bearerToken"] = from_union([from_str, from_none], self.bearer_token)
- if self.has_bearer_token_provider is not None:
- result["hasBearerTokenProvider"] = from_union([from_bool, from_none], self.has_bearer_token_provider)
- if self.headers is not None:
- result["headers"] = from_union([lambda x: from_dict(from_str, x), from_none], self.headers)
- if self.max_context_window_tokens is not None:
- result["maxContextWindowTokens"] = from_union([to_float, from_none], self.max_context_window_tokens)
- if self.max_output_tokens is not None:
- result["maxOutputTokens"] = from_union([to_float, from_none], self.max_output_tokens)
- if self.max_prompt_tokens is not None:
- result["maxPromptTokens"] = from_union([to_float, from_none], self.max_prompt_tokens)
- if self.model_capabilities is not None:
- result["modelCapabilities"] = from_union([lambda x: to_class(ModelCapabilitiesOverride, x), from_none], self.model_capabilities)
- if self.model_id is not None:
- result["modelId"] = from_union([from_str, from_none], self.model_id)
- if self.provider_name is not None:
- result["providerName"] = from_union([from_str, from_none], self.provider_name)
- if self.transport is not None:
- result["transport"] = from_union([lambda x: to_enum(ProviderTransport, x), from_none], self.transport)
- if self.type is not None:
- result["type"] = from_union([lambda x: to_enum(ProviderType, x), from_none], self.type)
- if self.wire_api is not None:
- result["wireApi"] = from_union([lambda x: to_enum(ProviderWireAPI, x), from_none], self.wire_api)
- if self.wire_model is not None:
- result["wireModel"] = from_union([from_str, from_none], self.wire_model)
- return result
-
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class PermissionsConfigureParams:
- """Patch of permission policy fields to apply (omit a field to leave it unchanged)."""
-
- additional_content_exclusion_policies: list[PermissionsConfigureAdditionalContentExclusionPolicy] | None = None
- """If specified, replaces the host-supplied GitHub Content Exclusion policies on the session
- (combined with natively-discovered policies when evaluating tool/file access). Omit to
- leave the current policies unchanged.
- """
- approve_all_read_permission_requests: bool | None = None
- """If specified, sets whether path/URL read permission requests are auto-approved. Omit to
- leave the current value unchanged.
- """
- approve_all_tool_permission_requests: bool | None = None
- """If specified, sets whether tool permission requests are auto-approved without prompting.
- Omit to leave the current value unchanged.
- """
- paths: PermissionPathsConfig | None = None
- """If specified, replaces the session's path-permission policy. The runtime constructs the
- appropriate PathManager based on these inputs (rooted at the session's working
- directory). Omit to leave the current path policy unchanged.
- """
- rules: PermissionRulesSet | None = None
- """If specified, replaces the session's approved/denied permission rules. Omit to leave the
- current rules unchanged.
- """
- urls: PermissionUrlsConfig | None = None
- """If specified, replaces the session's URL-permission policy. The runtime constructs a
- fresh DefaultUrlManager based on these inputs. Omit to leave the current URL policy
- unchanged.
- """
-
- @staticmethod
- def from_dict(obj: Any) -> 'PermissionsConfigureParams':
- assert isinstance(obj, dict)
- additional_content_exclusion_policies = from_union([lambda x: from_list(PermissionsConfigureAdditionalContentExclusionPolicy.from_dict, x), from_none], obj.get("additionalContentExclusionPolicies"))
- approve_all_read_permission_requests = from_union([from_bool, from_none], obj.get("approveAllReadPermissionRequests"))
- approve_all_tool_permission_requests = from_union([from_bool, from_none], obj.get("approveAllToolPermissionRequests"))
- paths = from_union([PermissionPathsConfig.from_dict, from_none], obj.get("paths"))
- rules = from_union([PermissionRulesSet.from_dict, from_none], obj.get("rules"))
- urls = from_union([PermissionUrlsConfig.from_dict, from_none], obj.get("urls"))
- return PermissionsConfigureParams(additional_content_exclusion_policies, approve_all_read_permission_requests, approve_all_tool_permission_requests, paths, rules, urls)
-
- def to_dict(self) -> dict:
- result: dict = {}
- if self.additional_content_exclusion_policies is not None:
- result["additionalContentExclusionPolicies"] = from_union([lambda x: from_list(lambda x: to_class(PermissionsConfigureAdditionalContentExclusionPolicy, x), x), from_none], self.additional_content_exclusion_policies)
- if self.approve_all_read_permission_requests is not None:
- result["approveAllReadPermissionRequests"] = from_union([from_bool, from_none], self.approve_all_read_permission_requests)
- if self.approve_all_tool_permission_requests is not None:
- result["approveAllToolPermissionRequests"] = from_union([from_bool, from_none], self.approve_all_tool_permission_requests)
- if self.paths is not None:
- result["paths"] = from_union([lambda x: to_class(PermissionPathsConfig, x), from_none], self.paths)
- if self.rules is not None:
- result["rules"] = from_union([lambda x: to_class(PermissionRulesSet, x), from_none], self.rules)
- if self.urls is not None:
- result["urls"] = from_union([lambda x: to_class(PermissionUrlsConfig, x), from_none], self.urls)
- return result
-
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class DiscoveredMCPServer:
- """MCP server discovered by `mcp.discover`, with config source, optional plugin source,
- transport type, and enabled state.
- """
- enabled: bool
- """Whether the server is enabled (not in the disabled list)"""
-
- name: str
- """Server name (config key)"""
-
- source: McpServerSource
- """Configuration source: user, workspace, plugin, or builtin"""
-
- effective_source: MCPSourceRef | None = None
- """Canonical identity and location of the effective server declaration."""
-
- source_plugin: str | None = None
- """Plugin name that provided this server, when source is plugin."""
-
- source_plugin_version: str | None = None
- """Plugin version that provided this server, when source is plugin."""
-
- type: DiscoveredMCPServerType | None = None
- """Server transport type: stdio, http, sse (deprecated), or memory"""
-
- @staticmethod
- def from_dict(obj: Any) -> 'DiscoveredMCPServer':
- assert isinstance(obj, dict)
- enabled = from_bool(obj.get("enabled"))
- name = from_str(obj.get("name"))
- source = McpServerSource(obj.get("source"))
- effective_source = from_union([MCPSourceRef.from_dict, from_none], obj.get("effectiveSource"))
- source_plugin = from_union([from_str, from_none], obj.get("sourcePlugin"))
- source_plugin_version = from_union([from_str, from_none], obj.get("sourcePluginVersion"))
- type = from_union([DiscoveredMCPServerType, from_none], obj.get("type"))
- return DiscoveredMCPServer(enabled, name, source, effective_source, source_plugin, source_plugin_version, type)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["enabled"] = from_bool(self.enabled)
- result["name"] = from_str(self.name)
- result["source"] = to_enum(McpServerSource, self.source)
- if self.effective_source is not None:
- result["effectiveSource"] = from_union([lambda x: to_class(MCPSourceRef, x), from_none], self.effective_source)
- if self.source_plugin is not None:
- result["sourcePlugin"] = from_union([from_str, from_none], self.source_plugin)
- if self.source_plugin_version is not None:
- result["sourcePluginVersion"] = from_union([from_str, from_none], self.source_plugin_version)
- if self.type is not None:
- result["type"] = from_union([lambda x: to_enum(DiscoveredMCPServerType, x), from_none], self.type)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class SandboxConfig:
@@ -33048,6 +33476,25 @@ def to_dict(self) -> dict:
result["omittedOlder"] = from_union([from_int, from_none], self.omitted_older)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class MCPDiscoverResult:
+ """MCP servers discovered from user, workspace, plugin, and built-in sources."""
+
+ servers: list[DiscoveredMCPServer]
+ """MCP servers discovered from all sources"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'MCPDiscoverResult':
+ assert isinstance(obj, dict)
+ servers = from_list(DiscoveredMCPServer.from_dict, obj.get("servers"))
+ return MCPDiscoverResult(servers)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["servers"] = from_list(lambda x: to_class(DiscoveredMCPServer, x), self.servers)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ProviderAddRequest:
@@ -33079,25 +33526,6 @@ def to_dict(self) -> dict:
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 MCPDiscoverResult:
- """MCP servers discovered from user, workspace, plugin, and built-in sources."""
-
- servers: list[DiscoveredMCPServer]
- """MCP servers discovered from all sources"""
-
- @staticmethod
- def from_dict(obj: Any) -> 'MCPDiscoverResult':
- assert isinstance(obj, dict)
- servers = from_list(DiscoveredMCPServer.from_dict, obj.get("servers"))
- return MCPDiscoverResult(servers)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["servers"] = from_list(lambda x: to_class(DiscoveredMCPServer, x), self.servers)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class SessionOpenOptions:
@@ -33214,8 +33642,9 @@ class SessionOpenOptions:
turn onward, so the earlier spawning turn reverts it as well.
"""
enable_managed_settings: bool | None = None
- """Opt-in: self-fetch and enforce enterprise managed settings at session bootstrap."""
-
+ """Opt-in: self-fetch and enforce enterprise managed settings, including managed hook
+ policies, at session bootstrap.
+ """
enable_on_demand_instruction_discovery: bool | None = None
"""Whether on-demand custom instruction discovery is enabled."""
@@ -33289,6 +33718,11 @@ class SessionOpenOptions:
lsp_client_name: str | None = None
"""Identifier sent to LSP-style integrations."""
+ managed_mcp_servers: dict[str, ManagedMCPServerConfig] | None = None
+ """Non-secret host-managed HTTP MCP servers keyed by stable managed identity. Managed
+ provenance is runtime-established from this separate field and credentials are supplied
+ through dynamic-header refresh.
+ """
managed_settings: SessionManagedSettings | None = None
"""Permissions-only enterprise policy injected by the SDK host at session create or resume.
Composes restrictively with self-fetched and device policy and is not persisted.
@@ -33434,6 +33868,7 @@ def from_dict(obj: Any) -> 'SessionOpenOptions':
is_experimental_mode = from_union([from_bool, from_none], obj.get("isExperimentalMode"))
log_interactive_shells = from_union([from_bool, from_none], obj.get("logInteractiveShells"))
lsp_client_name = from_union([from_str, from_none], obj.get("lspClientName"))
+ managed_mcp_servers = from_union([lambda x: from_dict(ManagedMCPServerConfig.from_dict, x), from_none], obj.get("managedMcpServers"))
managed_settings = from_union([SessionManagedSettings.from_dict, from_none], obj.get("managedSettings"))
max_inline_binary_bytes = from_union([from_int, from_none], obj.get("maxInlineBinaryBytes"))
memory = from_union([MemoryConfiguration.from_dict, from_none], obj.get("memory"))
@@ -33464,7 +33899,7 @@ def from_dict(obj: Any) -> 'SessionOpenOptions':
verbosity = from_union([Verbosity, from_none], obj.get("verbosity"))
working_directory = from_union([from_str, from_none], obj.get("workingDirectory"))
working_directory_context = from_union([SessionContext.from_dict, from_none], obj.get("workingDirectoryContext"))
- return SessionOpenOptions(additional_content_exclusion_policies, additional_directories, agent_context, allow_all_mcp_server_instructions, ask_user_disabled, auth_client_id_metadata_url, auth_info, available_tools, capi, client_kind, client_name, coauthor_enabled, config_dir, continue_on_auto_mode, copilot_url, custom_agents_local_only, detached_from_spawning_parent_engagement_id, detached_from_spawning_parent_session_id, disabled_instruction_sources, disabled_mcp_servers, disabled_skills, enable_citations, enable_file_change_tracking, enable_managed_settings, enable_on_demand_instruction_discovery, enable_script_safety, enable_skills, enable_streaming, env_value_mode, events_log_directory, events_log_includes_subagents, excluded_builtin_agents, excluded_tools, exp_assignments, feature_flags, has_skill_provider, included_builtin_agents, included_builtin_skills, installed_plugins, integration_id, is_experimental_mode, log_interactive_shells, lsp_client_name, managed_settings, max_inline_binary_bytes, memory, model, model_capabilities_overrides, models, name, provider, providers, reasoning_effort, reasoning_summary, refresh_custom_instructions, remote_defaulted_on, remote_exporting, remote_steerable, running_in_interactive_mode, sandbox_config, sandbox_config_source, session_capabilities, session_id, session_limits, shell, shell_init_profile, shell_process_flags, skill_directories, skip_custom_instructions, trajectory_file, verbosity, working_directory, working_directory_context)
+ return SessionOpenOptions(additional_content_exclusion_policies, additional_directories, agent_context, allow_all_mcp_server_instructions, ask_user_disabled, auth_client_id_metadata_url, auth_info, available_tools, capi, client_kind, client_name, coauthor_enabled, config_dir, continue_on_auto_mode, copilot_url, custom_agents_local_only, detached_from_spawning_parent_engagement_id, detached_from_spawning_parent_session_id, disabled_instruction_sources, disabled_mcp_servers, disabled_skills, enable_citations, enable_file_change_tracking, enable_managed_settings, enable_on_demand_instruction_discovery, enable_script_safety, enable_skills, enable_streaming, env_value_mode, events_log_directory, events_log_includes_subagents, excluded_builtin_agents, excluded_tools, exp_assignments, feature_flags, has_skill_provider, included_builtin_agents, included_builtin_skills, installed_plugins, integration_id, is_experimental_mode, log_interactive_shells, lsp_client_name, managed_mcp_servers, managed_settings, max_inline_binary_bytes, memory, model, model_capabilities_overrides, models, name, provider, providers, reasoning_effort, reasoning_summary, refresh_custom_instructions, remote_defaulted_on, remote_exporting, remote_steerable, running_in_interactive_mode, sandbox_config, sandbox_config_source, session_capabilities, session_id, session_limits, shell, shell_init_profile, shell_process_flags, skill_directories, skip_custom_instructions, trajectory_file, verbosity, working_directory, working_directory_context)
def to_dict(self) -> dict:
result: dict = {}
@@ -33554,6 +33989,8 @@ def to_dict(self) -> dict:
result["logInteractiveShells"] = from_union([from_bool, from_none], self.log_interactive_shells)
if self.lsp_client_name is not None:
result["lspClientName"] = from_union([from_str, from_none], self.lsp_client_name)
+ if self.managed_mcp_servers is not None:
+ result["managedMcpServers"] = from_union([lambda x: from_dict(lambda x: to_class(ManagedMCPServerConfig, x), x), from_none], self.managed_mcp_servers)
if self.managed_settings is not None:
result["managedSettings"] = from_union([lambda x: to_class(SessionManagedSettings, x), from_none], self.managed_settings)
if self.max_inline_binary_bytes is not None:
@@ -37876,6 +38313,7 @@ class RPC:
instruction_source_type: InstructionSourceType
interrupt_main_turn_request: InterruptMainTurnRequest
interrupt_main_turn_result: InterruptMainTurnResult
+ json_schema_response_format: JSONSchemaResponseFormat
llm_inference_headers: dict[str, list[str]]
llm_inference_http_request_chunk_request: LlmInferenceHTTPRequestChunkRequest
llm_inference_http_request_chunk_result: LlmInferenceHTTPRequestChunkResult
@@ -37892,6 +38330,7 @@ class RPC:
log_request: LogRequest
log_result: LogResult
lsp_initialize_request: LspInitializeRequest
+ managed_mcp_server_config: ManagedMCPServerConfig
managed_settings_read_result: ManagedSettingsReadResult
marketplace_add_result: MarketplaceAddResult
marketplace_browse_result: MarketplaceBrowseResult
@@ -38259,8 +38698,19 @@ class RPC:
plugin_update_all_entry: PluginUpdateAllEntry
plugin_update_all_result: PluginUpdateAllResult
plugin_update_result: PluginUpdateResult
+ protocol_append_mode: ProtocolAppendMode
+ protocol_customize_mode: ProtocolCustomizeMode
protocol_external_tool_defer: MCPServerConfigDeferTools
protocol_external_tool_definition: ProtocolExternalToolDefinition
+ protocol_marker_section_override: ProtocolMarkerSectionOverride
+ protocol_replace_mode: ProtocolReplaceMode
+ protocol_section_override: ProtocolSectionOverride
+ protocol_static_section_action: ProtocolStaticSectionAction
+ protocol_static_section_override: ProtocolStaticSectionOverride
+ protocol_system_message_append_config: ProtocolSystemMessageAppendConfig
+ protocol_system_message_config: ProtocolSystemMessageConfig
+ protocol_system_message_customize_config: ProtocolSystemMessageCustomizeConfig
+ protocol_system_message_replace_config: ProtocolSystemMessageReplaceConfig
provider_add_request: ProviderAddRequest
provider_add_result: ProviderAddResult
provider_config: ProviderConfig
@@ -38332,8 +38782,6 @@ class RPC:
queue_update_text_result: QueueUpdateTextResult
register_event_interest_params: RegisterEventInterestParams
register_event_interest_result: RegisterEventInterestResult
- register_extension_tools_params: _RegisterExtensionToolsParams
- register_extension_tools_result: _RegisterExtensionToolsResult
release_event_interest_params: ReleaseEventInterestParams
remote_control_config: RemoteControlConfig
remote_control_config_existing_mc_session: RemoteControlConfigExistingMcSession
@@ -38356,6 +38804,7 @@ class RPC:
remote_session_metadata_value: RemoteSessionMetadataValue
remote_session_mode: RemoteSessionMode
remote_session_repository: RemoteSessionRepository
+ response_format: ResponseFormat
run_options: RunOptions
sandbox_config: SandboxConfig
sandbox_config_auth: SandboxConfigAuth
@@ -38370,6 +38819,7 @@ class RPC:
sandbox_disable_for_session_request: SandboxDisableForSessionRequest
sandbox_disable_for_session_result: SandboxDisableForSessionResult
sandbox_enforcement_status: SandboxEnforcementStatus
+ sandbox_session_change: SandboxSessionChange
schedule_add_at_request: ScheduleAddAtRequest
schedule_add_cron_request: ScheduleAddCronRequest
schedule_add_request: ScheduleAddRequest
@@ -38546,7 +38996,6 @@ class RPC:
session_source: SessionSource
sessions_prune_old_request: SessionsPruneOldRequest
sessions_read_persisted_events_request: SessionsReadPersistedEventsRequest
- sessions_register_extension_tools_on_session_options: SessionsRegisterExtensionToolsOnSessionOptions
sessions_release_lock_request: SessionsReleaseLockRequest
sessions_release_lock_result: SessionsReleaseLockResult
sessions_reload_plugin_hooks_request: SessionsReloadPluginHooksRequest
@@ -38618,6 +39067,7 @@ class RPC:
slash_command_timeline_entry: SlashCommandTimelineEntry
subagent_settings_entry: SubagentSettingsEntry
subagent_settings_entry_context_tier: SubagentSettingsEntryContextTier
+ system_message_block: SystemMessageBlock
task_agent_info: TaskAgentInfo
task_agent_progress: TaskAgentProgress
task_client_active_status: TaskClientActiveStatus
@@ -39133,6 +39583,7 @@ def from_dict(obj: Any) -> 'RPC':
instruction_source_type = InstructionSourceType(obj.get("InstructionSourceType"))
interrupt_main_turn_request = InterruptMainTurnRequest.from_dict(obj.get("InterruptMainTurnRequest"))
interrupt_main_turn_result = InterruptMainTurnResult.from_dict(obj.get("InterruptMainTurnResult"))
+ json_schema_response_format = JSONSchemaResponseFormat.from_dict(obj.get("JsonSchemaResponseFormat"))
llm_inference_headers = from_dict(lambda x: from_list(from_str, x), obj.get("LlmInferenceHeaders"))
llm_inference_http_request_chunk_request = LlmInferenceHTTPRequestChunkRequest.from_dict(obj.get("LlmInferenceHttpRequestChunkRequest"))
llm_inference_http_request_chunk_result = LlmInferenceHTTPRequestChunkResult.from_dict(obj.get("LlmInferenceHttpRequestChunkResult"))
@@ -39149,6 +39600,7 @@ def from_dict(obj: Any) -> 'RPC':
log_request = LogRequest.from_dict(obj.get("LogRequest"))
log_result = LogResult.from_dict(obj.get("LogResult"))
lsp_initialize_request = LspInitializeRequest.from_dict(obj.get("LspInitializeRequest"))
+ managed_mcp_server_config = ManagedMCPServerConfig.from_dict(obj.get("ManagedMcpServerConfig"))
managed_settings_read_result = ManagedSettingsReadResult.from_dict(obj.get("ManagedSettingsReadResult"))
marketplace_add_result = MarketplaceAddResult.from_dict(obj.get("MarketplaceAddResult"))
marketplace_browse_result = MarketplaceBrowseResult.from_dict(obj.get("MarketplaceBrowseResult"))
@@ -39516,8 +39968,19 @@ def from_dict(obj: Any) -> 'RPC':
plugin_update_all_entry = PluginUpdateAllEntry.from_dict(obj.get("PluginUpdateAllEntry"))
plugin_update_all_result = PluginUpdateAllResult.from_dict(obj.get("PluginUpdateAllResult"))
plugin_update_result = PluginUpdateResult.from_dict(obj.get("PluginUpdateResult"))
+ protocol_append_mode = ProtocolAppendMode(obj.get("ProtocolAppendMode"))
+ protocol_customize_mode = ProtocolCustomizeMode(obj.get("ProtocolCustomizeMode"))
protocol_external_tool_defer = MCPServerConfigDeferTools(obj.get("ProtocolExternalToolDefer"))
protocol_external_tool_definition = ProtocolExternalToolDefinition.from_dict(obj.get("ProtocolExternalToolDefinition"))
+ protocol_marker_section_override = ProtocolMarkerSectionOverride.from_dict(obj.get("ProtocolMarkerSectionOverride"))
+ protocol_replace_mode = ProtocolReplaceMode(obj.get("ProtocolReplaceMode"))
+ protocol_section_override = ProtocolSectionOverride.from_dict(obj.get("ProtocolSectionOverride"))
+ protocol_static_section_action = ProtocolStaticSectionAction(obj.get("ProtocolStaticSectionAction"))
+ protocol_static_section_override = ProtocolStaticSectionOverride.from_dict(obj.get("ProtocolStaticSectionOverride"))
+ protocol_system_message_append_config = ProtocolSystemMessageAppendConfig.from_dict(obj.get("ProtocolSystemMessageAppendConfig"))
+ protocol_system_message_config = ProtocolSystemMessageConfig.from_dict(obj.get("ProtocolSystemMessageConfig"))
+ protocol_system_message_customize_config = ProtocolSystemMessageCustomizeConfig.from_dict(obj.get("ProtocolSystemMessageCustomizeConfig"))
+ protocol_system_message_replace_config = ProtocolSystemMessageReplaceConfig.from_dict(obj.get("ProtocolSystemMessageReplaceConfig"))
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"))
@@ -39589,8 +40052,6 @@ def from_dict(obj: Any) -> 'RPC':
queue_update_text_result = QueueUpdateTextResult.from_dict(obj.get("QueueUpdateTextResult"))
register_event_interest_params = RegisterEventInterestParams.from_dict(obj.get("RegisterEventInterestParams"))
register_event_interest_result = RegisterEventInterestResult.from_dict(obj.get("RegisterEventInterestResult"))
- register_extension_tools_params = _RegisterExtensionToolsParams.from_dict(obj.get("RegisterExtensionToolsParams"))
- register_extension_tools_result = _RegisterExtensionToolsResult.from_dict(obj.get("RegisterExtensionToolsResult"))
release_event_interest_params = ReleaseEventInterestParams.from_dict(obj.get("ReleaseEventInterestParams"))
remote_control_config = RemoteControlConfig.from_dict(obj.get("RemoteControlConfig"))
remote_control_config_existing_mc_session = RemoteControlConfigExistingMcSession.from_dict(obj.get("RemoteControlConfigExistingMcSession"))
@@ -39613,6 +40074,7 @@ def from_dict(obj: Any) -> 'RPC':
remote_session_metadata_value = RemoteSessionMetadataValue.from_dict(obj.get("RemoteSessionMetadataValue"))
remote_session_mode = RemoteSessionMode(obj.get("RemoteSessionMode"))
remote_session_repository = RemoteSessionRepository.from_dict(obj.get("RemoteSessionRepository"))
+ response_format = ResponseFormat.from_dict(obj.get("ResponseFormat"))
run_options = RunOptions.from_dict(obj.get("RunOptions"))
sandbox_config = SandboxConfig.from_dict(obj.get("SandboxConfig"))
sandbox_config_auth = SandboxConfigAuth.from_dict(obj.get("SandboxConfigAuth"))
@@ -39627,6 +40089,7 @@ def from_dict(obj: Any) -> 'RPC':
sandbox_disable_for_session_request = SandboxDisableForSessionRequest.from_dict(obj.get("SandboxDisableForSessionRequest"))
sandbox_disable_for_session_result = SandboxDisableForSessionResult.from_dict(obj.get("SandboxDisableForSessionResult"))
sandbox_enforcement_status = SandboxEnforcementStatus.from_dict(obj.get("SandboxEnforcementStatus"))
+ sandbox_session_change = SandboxSessionChange(obj.get("SandboxSessionChange"))
schedule_add_at_request = ScheduleAddAtRequest.from_dict(obj.get("ScheduleAddAtRequest"))
schedule_add_cron_request = ScheduleAddCronRequest.from_dict(obj.get("ScheduleAddCronRequest"))
schedule_add_request = ScheduleAddRequest.from_dict(obj.get("ScheduleAddRequest"))
@@ -39803,7 +40266,6 @@ def from_dict(obj: Any) -> 'RPC':
session_source = SessionSource(obj.get("SessionSource"))
sessions_prune_old_request = SessionsPruneOldRequest.from_dict(obj.get("SessionsPruneOldRequest"))
sessions_read_persisted_events_request = SessionsReadPersistedEventsRequest.from_dict(obj.get("SessionsReadPersistedEventsRequest"))
- sessions_register_extension_tools_on_session_options = SessionsRegisterExtensionToolsOnSessionOptions.from_dict(obj.get("SessionsRegisterExtensionToolsOnSessionOptions"))
sessions_release_lock_request = SessionsReleaseLockRequest.from_dict(obj.get("SessionsReleaseLockRequest"))
sessions_release_lock_result = SessionsReleaseLockResult.from_dict(obj.get("SessionsReleaseLockResult"))
sessions_reload_plugin_hooks_request = SessionsReloadPluginHooksRequest.from_dict(obj.get("SessionsReloadPluginHooksRequest"))
@@ -39875,6 +40337,7 @@ def from_dict(obj: Any) -> 'RPC':
slash_command_timeline_entry = SlashCommandTimelineEntry.from_dict(obj.get("SlashCommandTimelineEntry"))
subagent_settings_entry = SubagentSettingsEntry.from_dict(obj.get("SubagentSettingsEntry"))
subagent_settings_entry_context_tier = SubagentSettingsEntryContextTier(obj.get("SubagentSettingsEntryContextTier"))
+ system_message_block = SystemMessageBlock.from_dict(obj.get("SystemMessageBlock"))
task_agent_info = TaskAgentInfo.from_dict(obj.get("TaskAgentInfo"))
task_agent_progress = TaskAgentProgress.from_dict(obj.get("TaskAgentProgress"))
task_client_active_status = TaskClientActiveStatus(obj.get("TaskClientActiveStatus"))
@@ -40030,7 +40493,7 @@ 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_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, adaptive_thinking_support, agent_discovery_path, agent_discovery_path_list, agent_discovery_path_scope, agent_get_current_result, agent_info, agent_info_source, agent_list, agent_list_request, 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, agent_set_prompt_request, agents_get_discovery_paths_request, api_key_auth_info, auth_identity, auth_info, auth_info_type, auth_validation_error, auth_validation_errors, autopilot_objective_credit_limit, autopilot_objective_get_state_result, autopilot_objective_state, autopilot_objective_status, built_in_model_catalog, built_in_model_catalog_entry, builtin_tool_descriptor, builtin_tool_format, builtin_tool_format_type, builtin_tool_input_schema, builtin_tool_input_schema_type, builtin_tool_safe_for_telemetry, builtin_tool_safe_telemetry_fields, 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_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_provider_register_request, canvas_provider_unregister_request, canvas_session_context, capi_session_options, card_digest, card_digest_algorithm, card_digest_value, catalog_ai_skill_candidate, catalog_ai_skill_candidate_provenance, catalog_authentication_required_error, catalog_authentication_required_reason, catalog_candidate, catalog_candidate_kind, catalog_candidate_source, catalog_candidate_source_embedded, catalog_candidate_source_url, catalog_capability, catalog_capability_id, catalog_client_contract, catalog_contract_violation_error, catalog_contract_violation_reason, catalog_handle_rejected_error, catalog_handle_rejection_reason, catalog_handle_type, catalog_invalid_request_error, catalog_invalid_request_field, catalog_malformed_card_error, catalog_malformed_card_reason, catalog_mcp_server_candidate, catalog_mcp_server_candidate_provenance, catalog_mcp_server_installability, catalog_media_type, catalog_negotiated_contract, catalog_negotiation_refused_error, catalog_negotiation_refused_reason, catalog_network_failure_error, catalog_network_failure_reason, catalog_not_installable_error, catalog_not_installable_reason, catalog_policy_rejected_error, catalog_search_request, catalog_search_result, catalog_search_succeeded, catalog_trust_eligibility, catalog_trust_provenance, catalog_trust_snapshot, catalog_trust_snapshot_absent, catalog_trust_snapshot_absent_status, catalog_trust_snapshot_current, catalog_trust_snapshot_current_status, catalog_trust_snapshot_downgraded, catalog_trust_snapshot_downgraded_status, catalog_trust_snapshot_malformed, catalog_trust_snapshot_malformed_status, catalog_trust_snapshot_revoked, catalog_trust_snapshot_revoked_status, catalog_trust_snapshot_schema_version, catalog_trust_snapshot_stale, catalog_trust_snapshot_stale_status, catalog_trust_snapshot_unsupported, catalog_trust_snapshot_unsupported_status, catalog_trust_source, catalog_trust_tier, catalog_unavailable_error, catalog_unavailable_reason, catalog_unavailable_transport_error, catalog_unavailable_transport_reason, catalog_unsafe_retrieval_error, catalog_unsafe_retrieval_reason, catalog_unsupported_kind_error, client_metadata, client_task_cancel_reason, client_task_cancel_request, client_task_cancel_result, command_list, commands_finalize_invocation_effect_request, commands_finalize_invocation_effect_result, commands_handle_pending_command_request, commands_handle_pending_command_result, commands_invocation_effect_outcome, commands_invocation_origin, commands_invoke_request, commands_list_request, commands_respond_to_queued_command_request, commands_respond_to_queued_command_result, completions_get_trigger_characters_result, completions_request_request, completions_request_result, configure_session_extensions_params, connect_client_info, connected_remote_session_metadata, connected_remote_session_metadata_kind, connected_remote_session_metadata_repository, connect_remote_session_params, connect_request, connect_result, content_exclusion_check_paths_request, content_exclusion_check_paths_result, content_exclusion_path_check, content_filter_mode, context_heaviest_message, 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, debug_collect_logs_collected_entry, debug_collect_logs_destination, debug_collect_logs_entry, debug_collect_logs_entry_kind, debug_collect_logs_include, debug_collect_logs_redaction, debug_collect_logs_request, debug_collect_logs_result, debug_collect_logs_result_kind, debug_collect_logs_skipped_entry, debug_collect_logs_source, discovered_canvas, discovered_extension, discovered_extension_mode, discovered_extension_plugin, discovered_extensions, discovered_extensions_disable_request, discovered_extensions_enable_request, discovered_extension_source, discovered_hook, 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_direction, events_read_result, execute_command_params, execute_command_result, extension, extension_context_push_input, extension_launch_profile, extension_launch_provider_resolve_request, extension_launch_provider_resolve_result, 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_shell_exit, external_tool_text_result_for_llm_content_terminal, external_tool_text_result_for_llm_content_text, factory_abort_request, factory_ack_result, factory_agent_options, factory_agent_request, factory_agent_result, factory_agent_summary, factory_cancel_request, factory_current_phase, factory_declared_limits, factory_durable_operation, factory_execute_request, factory_execute_result, factory_get_run_progress_request, factory_get_run_request, factory_journal_get_request, factory_journal_get_result, factory_journal_put_request, factory_list_runs_request, factory_list_runs_result, factory_log_line, factory_log_line_kind, factory_log_request, factory_pause_checkpoint_action, factory_pause_checkpoint_request, factory_pause_checkpoint_result, factory_pause_info, factory_pause_request, factory_phase_observation, factory_phase_status, factory_progress_line, factory_progress_page, factory_resume_request, factory_resume_result, factory_run_consumed, factory_run_detail, factory_run_failure, factory_run_failure_kind, factory_run_limits, factory_run_request, factory_run_result, factory_run_status, factory_run_summary, factory_run_terminal, factory_tool_resume_request, factory_tool_run_options, factory_tool_run_request, filter_mapping, fleet_start_request, fleet_start_result, folder_trust_add_params, folder_trust_check_params, folder_trust_check_result, gh_cli_auth_info, git_hub_telemetry_client_info, git_hub_telemetry_event, git_hub_telemetry_notification, git_hub_token_acquire_reason, git_hub_token_acquire_request, git_hub_token_acquire_result, handle_pending_tool_call_request, handle_pending_tool_call_result, history_abort_manual_compaction_result, history_cancel_background_compaction_result, history_clear_context_request, history_clear_context_result, history_compact_context_window, history_compact_request, history_compact_result, history_file_restore_skip_reason, history_list_rewind_points_result, history_preview_rewind_request, history_preview_rewind_result, history_rewind_change_type, history_rewind_file_preview, history_rewind_mode, history_rewind_outcome, history_rewind_point, history_rewind_request, history_rewind_result, history_rewind_unavailable_reason, history_skipped_file_restore, history_summarize_for_handoff_result, history_truncate_request, history_truncate_result, hmac_auth_info, hook_invoke_request, hook_invoke_response, hook_origin, hooks_discover_request, hooks_discover_result, hook_type, 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, interrupt_main_turn_request, interrupt_main_turn_result, 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, managed_settings_read_result, 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_elicitation_form_mode, mcp_enable_request, mcp_execute_sampling_params, mcp_execute_sampling_request, mcp_execute_sampling_result, mcp_failed_server, mcp_filtered_server, mcp_headers_handle_pending_headers_refresh_request, mcp_headers_handle_pending_headers_refresh_request_request, mcp_headers_handle_pending_headers_refresh_request_result, mcp_host_state, mcp_install_plan, mcp_is_server_running_request, mcp_is_server_running_result, mcp_list_tools_request, mcp_list_tools_result, mcp_oauth_authentication_state_changed_request, mcp_oauth_handle_pending_request, mcp_oauth_handle_pending_result, mcp_oauth_login_grant_type, mcp_oauth_login_request, mcp_oauth_login_result, mcp_oauth_pending_request_response, mcp_oauth_probe_needs_auth_reason, mcp_oauth_probe_request, mcp_oauth_probe_result, mcp_oauth_respond_request, mcp_oauth_respond_result, mcp_plan_configuration_change, mcp_plan_configuration_operation, mcp_plan_enum_value_type, mcp_plan_install_planned, mcp_plan_install_request, mcp_plan_install_result, mcp_plan_install_source, mcp_plan_install_source_candidate, mcp_plan_install_source_candidate_kind, mcp_plan_install_source_card, mcp_plan_install_source_card_kind, mcp_plan_package_install_method, mcp_plan_package_transport, mcp_plan_policy_decision, mcp_plan_policy_result, mcp_plan_policy_source, mcp_plan_provenance, mcp_plan_remote_install_method, mcp_plan_remote_transport, mcp_plan_required_value, mcp_plan_required_value_enum, mcp_plan_required_value_enum_kind, mcp_plan_required_value_scalar, mcp_plan_required_value_scalar_kind, mcp_plan_resource_identity, mcp_plan_scalar_value_type, mcp_plan_scope, mcp_plan_secret_placeholder, mcp_plan_secret_reference, mcp_plan_target, mcp_plan_transport_choice, mcp_plan_transport_choice_package, mcp_plan_transport_choice_remote, mcp_plan_value_category, mcp_register_external_client_request, mcp_reload_config, mcp_reload_with_config_request, mcp_remove_git_hub_result, mcp_resource, mcp_resource_annotations, mcp_resource_content, mcp_resource_icon, mcp_resources_list_request, mcp_resources_list_result, mcp_resources_list_templates_request, mcp_resources_list_templates_result, mcp_resources_read_request, mcp_resources_read_result, mcp_resource_template, mcp_restart_server_request, mcp_safe_for_telemetry, mcp_safe_for_telemetry_fields, mcp_sampling_execution_action, mcp_sampling_execution_result, mcp_serializable_server_config, mcp_server, mcp_server_auth_config, mcp_server_auth_config_redirect_port, mcp_server_card_embedded, mcp_server_card_embedded_kind, mcp_server_card_media_type, mcp_server_card_reference, mcp_server_card_url, mcp_server_card_url_kind, 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_memory, mcp_server_config_memory_type, mcp_server_config_stdio, mcp_server_config_stdio_type, 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_source_file, mcp_source_plugin, mcp_source_ref, mcp_start_server_request, mcp_start_servers_result, mcp_stop_server_request, mcp_task_metadata, mcp_tools, mcp_tool_ui, mcp_tool_ui_visibility, mcp_unregister_external_client_request, memory_configuration, metadata_context_attribution_result, metadata_context_heaviest_messages_request, metadata_context_heaviest_messages_result, 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, metadata_update_client_metadata_request, model, model_apply_startup_overlay_request, model_billing, model_billing_promo, 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_message, model_picker_category, model_picker_persistence_request, model_picker_price_category, model_picker_settings_context, model_policy, model_policy_state, model_set_allowed_models_request, model_set_allowed_models_result, model_set_reasoning_effort_request, model_set_reasoning_effort_result, models_list_request, model_switch_auto_tier_request, model_switch_auto_tier_result, model_switch_auto_tier_status, model_switch_confirmation, model_switch_to_request, model_switch_to_result, model_warning_text, mode_set_request, mode_set_result, move_mcp_loading_to_background_result, 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_env_access, permission_decision_approve_for_location_approval_extension_management, permission_decision_approve_for_location_approval_extension_permission_access, permission_decision_approve_for_location_approval_factory, 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_env_access, permission_decision_approve_for_session_approval_extension_management, permission_decision_approve_for_session_approval_extension_permission_access, permission_decision_approve_for_session_approval_factory, 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_context, 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_outcome, permission_decision_reject, permission_decision_request, permission_decision_surface, 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_mode_source, 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_response_capability, 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_mode_request, permissions_get_mode_result, 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_env_access, permissions_locations_add_tool_approval_details_extension_management, permissions_locations_add_tool_approval_details_extension_permission_access, permissions_locations_add_tool_approval_details_factory, 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_approve_all_request, permissions_set_approve_all_result, permissions_set_approve_all_source, permissions_set_mode_request, permissions_set_mode_result, 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_install_staging_mode, plugin_list, plugin_list_result, plugins_builtin_set_request, 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, protocol_external_tool_defer, protocol_external_tool_definition, provider_add_request, provider_add_result, provider_config, provider_config_azure, provider_config_transport, provider_config_type, provider_config_wire_api, provider_endpoint, provider_endpoint_transport, provider_endpoint_type, provider_endpoint_wire_api, provider_get_endpoint_request, provider_model_config, provider_session_token, provider_token_acquire_request, provider_token_acquire_result, push_attachment, push_attachment_blob, push_attachment_directory, push_attachment_file, push_attachment_file_line_range, push_attachment_git_hub_actions_job, push_attachment_git_hub_commit, push_attachment_git_hub_file, push_attachment_git_hub_file_diff, push_attachment_git_hub_file_diff_side, push_attachment_git_hub_reference, push_attachment_git_hub_reference_type, push_attachment_git_hub_release, push_attachment_git_hub_repository, push_attachment_git_hub_snippet, push_attachment_git_hub_tree_comparison, push_attachment_git_hub_tree_comparison_side, push_attachment_git_hub_url, push_attachment_selection, push_attachment_selection_details, push_attachment_selection_details_end, push_attachment_selection_details_start, push_git_hub_repo_ref, queue_begin_deferred_idle_drain_request, queue_begin_deferred_idle_drain_result, queue_consume_system_notifications_request, queued_command_handled, queued_command_not_handled, queued_command_result, queue_defer_session_idle_request, queue_duplicate_at_request, queue_duplicate_at_result, queue_enqueue_resume_pending_result, queue_finish_deferred_idle_drain_request, queue_finish_deferred_idle_drain_result, queue_has_pending_result, queue_insert_at_request, queue_insert_at_result, queue_insert_message, queue_move_item_request, queue_move_item_result, queue_pending_items, queue_pending_items_kind, queue_pending_items_result, queue_remove_at_request, queue_remove_at_result, queue_remove_most_recent_result, queue_send_now_request, queue_send_now_result, queue_set_drain_paused_request, queue_snapshot_result, queue_update_text_request, queue_update_text_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_host_status, remote_session_metadata_repository, remote_session_metadata_task_type, remote_session_metadata_value, remote_session_mode, remote_session_repository, run_options, sandbox_config, sandbox_config_auth, sandbox_config_source, 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, sandbox_config_user_policy_network_proxy, sandbox_config_user_policy_seatbelt, sandbox_disable_for_session_request, sandbox_disable_for_session_result, sandbox_enforcement_status, schedule_add_at_request, schedule_add_cron_request, schedule_add_request, schedule_add_result, schedule_add_self_paced_request, schedule_entry, schedule_has_self_paced_result, schedule_list, schedule_rearm_self_paced_request, 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_message_item, send_messages_request, send_messages_result, send_mode, send_request, send_result, send_system_notification_request, server_agent_list, server_instruction_source_list, server_skill, server_skill_list, session_activity, session_agent_list_request, session_auth_login_request, session_auth_logout_user_request, session_auth_status, session_auth_switch_request, session_bulk_delete_result, session_cancel_all_background_agents_result, session_capability, session_commands_list_request, session_completion_item, session_context, session_context_host_type, session_enrich_metadata_result, session_factory_pause_at_checkpoint_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_sqlite_transaction_error, session_fs_sqlite_transaction_error_class, session_fs_sqlite_transaction_request, session_fs_sqlite_transaction_result, session_fs_sqlite_transaction_statement, session_fs_stat_request, session_fs_stat_result, session_fs_write_file_request, session_git_hub_auth_get_all_auth_available_result, session_git_hub_auth_logout_result, session_git_hub_auth_logout_user_result, session_history_compact_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_limit_prediction_baseline_data, session_limit_prediction_client_type, session_limit_prediction_details, session_limit_prediction_predict_request, session_limit_prediction_request, session_limit_prediction_result, session_limit_prediction_source, session_limit_prediction_tier, session_limit_prediction_tier_option, session_limit_prediction_unavailable_reason, session_list, session_list_entry, session_list_filter, session_load_deferred_repo_hooks_result, session_log_level, session_managed_permissions, session_managed_settings, session_mcp_apps_call_tool_result, session_metadata_snapshot, session_mode, session_model_list, session_model_list_request, session_model_price_category, 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_plugins_reload_request, session_provider_get_endpoint_request, session_prune_result, sessions_bulk_delete_request, sessions_check_in_use_request, sessions_check_in_use_result, sessions_client_metadata_entry, sessions_close_request, sessions_close_result, sessions_delete_request, sessions_enrich_metadata_request, session_set_credentials_params, session_set_credentials_result, session_settings_built_in_tool_availability_snapshot, session_settings_evaluate_predicate_request, session_settings_evaluate_predicate_result, session_settings_job_snapshot, session_settings_model_snapshot, session_settings_online_evaluation_snapshot, session_settings_predicate_name, session_settings_repo_snapshot, session_settings_snapshot, session_settings_validation_snapshot, 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_client_metadata_request, sessions_get_client_metadata_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_metadata_request, sessions_get_metadata_result, sessions_get_persisted_remote_steerable_request, sessions_get_persisted_remote_steerable_result, session_sizes, sessions_list_non_empty_session_ids_request, sessions_list_non_empty_session_ids_result, 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_prune_old_request, sessions_read_persisted_events_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_visibility_status, session_working_directory_context, session_working_directory_context_host_type, settable_auth_info, settable_token_auth_info, shell_cancel_user_requested_request, shell_credentials, shell_exec_request, shell_exec_result, shell_execute_user_requested_request, shell_init_profile, shell_init_script, shell_init_script_shell, shell_kill_request, shell_kill_result, shell_kill_signal, shell_options, shutdown_request, skill, skill_discovery_path, skill_discovery_path_list, skill_discovery_scope, skill_list, skill_provider_descriptor, skill_provider_list_request, skill_provider_list_result, skill_provider_read_request, skill_provider_read_result, skills_config_set_disabled_skills_request, skills_config_set_skill_disabled_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_add_timeline_entry_result, slash_command_agent_prompt_result, slash_command_completed_result, slash_command_info, slash_command_input, slash_command_input_choice, slash_command_input_completion, slash_command_invocation_result, slash_command_kind, slash_command_model_picker_dialog, slash_command_select_subcommand_option, slash_command_select_subcommand_result, slash_command_set_model_result, slash_command_set_plan_model_result, slash_command_show_dialog_result, slash_command_text_result, slash_command_timeline_entry, subagent_settings_entry, subagent_settings_entry_context_tier, task_agent_info, task_agent_progress, task_client_active_status, task_client_execution_mode, task_client_info, task_client_owner, task_client_owner_kind, task_client_owner_presence, task_client_progress, task_client_status, task_client_type, task_client_update, task_complete_data, task_completion_decision, task_execution_mode, task_info, task_kind, 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_register_request, tasks_register_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_update_request, tasks_update_result, tasks_wait_for_pending_result, telemetry_set_feature_overrides_request, token_auth_info, token_provider_auth_info, tool, tool_list, tool_result, tool_result_expanded, tool_result_new_message, tool_result_type, tools_execute_request, tools_get_builtin_descriptors_request, tools_get_builtin_descriptors_result, tools_get_current_metadata_result, tools_initialize_and_validate_result, tools_list_request, tools_set_request, tools_set_result, tools_shell_descriptor_config, tools_task_complete_event_data_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_session_limits_exhausted_request, ui_handle_pending_user_input_request, ui_register_direct_auto_mode_switch_handler_result, ui_session_limits_exhausted_response, ui_session_limits_exhausted_response_action, 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_agent_metric, 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, user_setting_metadata, user_settings_get_result, user_settings_set_request, user_settings_set_result, visibility_get_result, visibility_set_request, visibility_set_result, workspace_diff_file_change, workspace_diff_file_change_type, workspace_diff_mode, workspace_diff_result, workspaces_add_summary_request, workspaces_add_summary_result, workspaces_autopilot_objective_exists_result, workspaces_checkpoints, workspaces_create_file_request, workspaces_delete_autopilot_objective_result, workspaces_diff_request, workspaces_ensure_request, workspaces_get_workspace_result, workspaces_list_checkpoints_result, workspaces_list_files_result, workspaces_read_autopilot_objective_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, workspaces_truncate_summaries_request, workspace_summary_host_type, workspaces_update_metadata_request, workspaces_workspace_details_host_type, workspaces_write_autopilot_objective_request, workspaces_write_autopilot_objective_result, session_auth_info_result, session_context_attribution, 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, adaptive_thinking_support, agent_discovery_path, agent_discovery_path_list, agent_discovery_path_scope, agent_get_current_result, agent_info, agent_info_source, agent_list, agent_list_request, 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, agent_set_prompt_request, agents_get_discovery_paths_request, api_key_auth_info, auth_identity, auth_info, auth_info_type, auth_validation_error, auth_validation_errors, autopilot_objective_credit_limit, autopilot_objective_get_state_result, autopilot_objective_state, autopilot_objective_status, built_in_model_catalog, built_in_model_catalog_entry, builtin_tool_descriptor, builtin_tool_format, builtin_tool_format_type, builtin_tool_input_schema, builtin_tool_input_schema_type, builtin_tool_safe_for_telemetry, builtin_tool_safe_telemetry_fields, 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_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_provider_register_request, canvas_provider_unregister_request, canvas_session_context, capi_session_options, card_digest, card_digest_algorithm, card_digest_value, catalog_ai_skill_candidate, catalog_ai_skill_candidate_provenance, catalog_authentication_required_error, catalog_authentication_required_reason, catalog_candidate, catalog_candidate_kind, catalog_candidate_source, catalog_candidate_source_embedded, catalog_candidate_source_url, catalog_capability, catalog_capability_id, catalog_client_contract, catalog_contract_violation_error, catalog_contract_violation_reason, catalog_handle_rejected_error, catalog_handle_rejection_reason, catalog_handle_type, catalog_invalid_request_error, catalog_invalid_request_field, catalog_malformed_card_error, catalog_malformed_card_reason, catalog_mcp_server_candidate, catalog_mcp_server_candidate_provenance, catalog_mcp_server_installability, catalog_media_type, catalog_negotiated_contract, catalog_negotiation_refused_error, catalog_negotiation_refused_reason, catalog_network_failure_error, catalog_network_failure_reason, catalog_not_installable_error, catalog_not_installable_reason, catalog_policy_rejected_error, catalog_search_request, catalog_search_result, catalog_search_succeeded, catalog_trust_eligibility, catalog_trust_provenance, catalog_trust_snapshot, catalog_trust_snapshot_absent, catalog_trust_snapshot_absent_status, catalog_trust_snapshot_current, catalog_trust_snapshot_current_status, catalog_trust_snapshot_downgraded, catalog_trust_snapshot_downgraded_status, catalog_trust_snapshot_malformed, catalog_trust_snapshot_malformed_status, catalog_trust_snapshot_revoked, catalog_trust_snapshot_revoked_status, catalog_trust_snapshot_schema_version, catalog_trust_snapshot_stale, catalog_trust_snapshot_stale_status, catalog_trust_snapshot_unsupported, catalog_trust_snapshot_unsupported_status, catalog_trust_source, catalog_trust_tier, catalog_unavailable_error, catalog_unavailable_reason, catalog_unavailable_transport_error, catalog_unavailable_transport_reason, catalog_unsafe_retrieval_error, catalog_unsafe_retrieval_reason, catalog_unsupported_kind_error, client_metadata, client_task_cancel_reason, client_task_cancel_request, client_task_cancel_result, command_list, commands_finalize_invocation_effect_request, commands_finalize_invocation_effect_result, commands_handle_pending_command_request, commands_handle_pending_command_result, commands_invocation_effect_outcome, commands_invocation_origin, commands_invoke_request, commands_list_request, commands_respond_to_queued_command_request, commands_respond_to_queued_command_result, completions_get_trigger_characters_result, completions_request_request, completions_request_result, configure_session_extensions_params, connect_client_info, connected_remote_session_metadata, connected_remote_session_metadata_kind, connected_remote_session_metadata_repository, connect_remote_session_params, connect_request, connect_result, content_exclusion_check_paths_request, content_exclusion_check_paths_result, content_exclusion_path_check, content_filter_mode, context_heaviest_message, 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, debug_collect_logs_collected_entry, debug_collect_logs_destination, debug_collect_logs_entry, debug_collect_logs_entry_kind, debug_collect_logs_include, debug_collect_logs_redaction, debug_collect_logs_request, debug_collect_logs_result, debug_collect_logs_result_kind, debug_collect_logs_skipped_entry, debug_collect_logs_source, discovered_canvas, discovered_extension, discovered_extension_mode, discovered_extension_plugin, discovered_extensions, discovered_extensions_disable_request, discovered_extensions_enable_request, discovered_extension_source, discovered_hook, 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_direction, events_read_result, execute_command_params, execute_command_result, extension, extension_context_push_input, extension_launch_profile, extension_launch_provider_resolve_request, extension_launch_provider_resolve_result, 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_shell_exit, external_tool_text_result_for_llm_content_terminal, external_tool_text_result_for_llm_content_text, factory_abort_request, factory_ack_result, factory_agent_options, factory_agent_request, factory_agent_result, factory_agent_summary, factory_cancel_request, factory_current_phase, factory_declared_limits, factory_durable_operation, factory_execute_request, factory_execute_result, factory_get_run_progress_request, factory_get_run_request, factory_journal_get_request, factory_journal_get_result, factory_journal_put_request, factory_list_runs_request, factory_list_runs_result, factory_log_line, factory_log_line_kind, factory_log_request, factory_pause_checkpoint_action, factory_pause_checkpoint_request, factory_pause_checkpoint_result, factory_pause_info, factory_pause_request, factory_phase_observation, factory_phase_status, factory_progress_line, factory_progress_page, factory_resume_request, factory_resume_result, factory_run_consumed, factory_run_detail, factory_run_failure, factory_run_failure_kind, factory_run_limits, factory_run_request, factory_run_result, factory_run_status, factory_run_summary, factory_run_terminal, factory_tool_resume_request, factory_tool_run_options, factory_tool_run_request, filter_mapping, fleet_start_request, fleet_start_result, folder_trust_add_params, folder_trust_check_params, folder_trust_check_result, gh_cli_auth_info, git_hub_telemetry_client_info, git_hub_telemetry_event, git_hub_telemetry_notification, git_hub_token_acquire_reason, git_hub_token_acquire_request, git_hub_token_acquire_result, handle_pending_tool_call_request, handle_pending_tool_call_result, history_abort_manual_compaction_result, history_cancel_background_compaction_result, history_clear_context_request, history_clear_context_result, history_compact_context_window, history_compact_request, history_compact_result, history_file_restore_skip_reason, history_list_rewind_points_result, history_preview_rewind_request, history_preview_rewind_result, history_rewind_change_type, history_rewind_file_preview, history_rewind_mode, history_rewind_outcome, history_rewind_point, history_rewind_request, history_rewind_result, history_rewind_unavailable_reason, history_skipped_file_restore, history_summarize_for_handoff_result, history_truncate_request, history_truncate_result, hmac_auth_info, hook_invoke_request, hook_invoke_response, hook_origin, hooks_discover_request, hooks_discover_result, hook_type, 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, interrupt_main_turn_request, interrupt_main_turn_result, json_schema_response_format, 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, managed_mcp_server_config, managed_settings_read_result, 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_elicitation_form_mode, mcp_enable_request, mcp_execute_sampling_params, mcp_execute_sampling_request, mcp_execute_sampling_result, mcp_failed_server, mcp_filtered_server, mcp_headers_handle_pending_headers_refresh_request, mcp_headers_handle_pending_headers_refresh_request_request, mcp_headers_handle_pending_headers_refresh_request_result, mcp_host_state, mcp_install_plan, mcp_is_server_running_request, mcp_is_server_running_result, mcp_list_tools_request, mcp_list_tools_result, mcp_oauth_authentication_state_changed_request, mcp_oauth_handle_pending_request, mcp_oauth_handle_pending_result, mcp_oauth_login_grant_type, mcp_oauth_login_request, mcp_oauth_login_result, mcp_oauth_pending_request_response, mcp_oauth_probe_needs_auth_reason, mcp_oauth_probe_request, mcp_oauth_probe_result, mcp_oauth_respond_request, mcp_oauth_respond_result, mcp_plan_configuration_change, mcp_plan_configuration_operation, mcp_plan_enum_value_type, mcp_plan_install_planned, mcp_plan_install_request, mcp_plan_install_result, mcp_plan_install_source, mcp_plan_install_source_candidate, mcp_plan_install_source_candidate_kind, mcp_plan_install_source_card, mcp_plan_install_source_card_kind, mcp_plan_package_install_method, mcp_plan_package_transport, mcp_plan_policy_decision, mcp_plan_policy_result, mcp_plan_policy_source, mcp_plan_provenance, mcp_plan_remote_install_method, mcp_plan_remote_transport, mcp_plan_required_value, mcp_plan_required_value_enum, mcp_plan_required_value_enum_kind, mcp_plan_required_value_scalar, mcp_plan_required_value_scalar_kind, mcp_plan_resource_identity, mcp_plan_scalar_value_type, mcp_plan_scope, mcp_plan_secret_placeholder, mcp_plan_secret_reference, mcp_plan_target, mcp_plan_transport_choice, mcp_plan_transport_choice_package, mcp_plan_transport_choice_remote, mcp_plan_value_category, mcp_register_external_client_request, mcp_reload_config, mcp_reload_with_config_request, mcp_remove_git_hub_result, mcp_resource, mcp_resource_annotations, mcp_resource_content, mcp_resource_icon, mcp_resources_list_request, mcp_resources_list_result, mcp_resources_list_templates_request, mcp_resources_list_templates_result, mcp_resources_read_request, mcp_resources_read_result, mcp_resource_template, mcp_restart_server_request, mcp_safe_for_telemetry, mcp_safe_for_telemetry_fields, mcp_sampling_execution_action, mcp_sampling_execution_result, mcp_serializable_server_config, mcp_server, mcp_server_auth_config, mcp_server_auth_config_redirect_port, mcp_server_card_embedded, mcp_server_card_embedded_kind, mcp_server_card_media_type, mcp_server_card_reference, mcp_server_card_url, mcp_server_card_url_kind, 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_memory, mcp_server_config_memory_type, mcp_server_config_stdio, mcp_server_config_stdio_type, 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_source_file, mcp_source_plugin, mcp_source_ref, mcp_start_server_request, mcp_start_servers_result, mcp_stop_server_request, mcp_task_metadata, mcp_tools, mcp_tool_ui, mcp_tool_ui_visibility, mcp_unregister_external_client_request, memory_configuration, metadata_context_attribution_result, metadata_context_heaviest_messages_request, metadata_context_heaviest_messages_result, 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, metadata_update_client_metadata_request, model, model_apply_startup_overlay_request, model_billing, model_billing_promo, 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_message, model_picker_category, model_picker_persistence_request, model_picker_price_category, model_picker_settings_context, model_policy, model_policy_state, model_set_allowed_models_request, model_set_allowed_models_result, model_set_reasoning_effort_request, model_set_reasoning_effort_result, models_list_request, model_switch_auto_tier_request, model_switch_auto_tier_result, model_switch_auto_tier_status, model_switch_confirmation, model_switch_to_request, model_switch_to_result, model_warning_text, mode_set_request, mode_set_result, move_mcp_loading_to_background_result, 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_env_access, permission_decision_approve_for_location_approval_extension_management, permission_decision_approve_for_location_approval_extension_permission_access, permission_decision_approve_for_location_approval_factory, 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_env_access, permission_decision_approve_for_session_approval_extension_management, permission_decision_approve_for_session_approval_extension_permission_access, permission_decision_approve_for_session_approval_factory, 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_context, 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_outcome, permission_decision_reject, permission_decision_request, permission_decision_surface, 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_mode_source, 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_response_capability, 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_mode_request, permissions_get_mode_result, 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_env_access, permissions_locations_add_tool_approval_details_extension_management, permissions_locations_add_tool_approval_details_extension_permission_access, permissions_locations_add_tool_approval_details_factory, 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_approve_all_request, permissions_set_approve_all_result, permissions_set_approve_all_source, permissions_set_mode_request, permissions_set_mode_result, 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_install_staging_mode, plugin_list, plugin_list_result, plugins_builtin_set_request, 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, protocol_append_mode, protocol_customize_mode, protocol_external_tool_defer, protocol_external_tool_definition, protocol_marker_section_override, protocol_replace_mode, protocol_section_override, protocol_static_section_action, protocol_static_section_override, protocol_system_message_append_config, protocol_system_message_config, protocol_system_message_customize_config, protocol_system_message_replace_config, provider_add_request, provider_add_result, provider_config, provider_config_azure, provider_config_transport, provider_config_type, provider_config_wire_api, provider_endpoint, provider_endpoint_transport, provider_endpoint_type, provider_endpoint_wire_api, provider_get_endpoint_request, provider_model_config, provider_session_token, provider_token_acquire_request, provider_token_acquire_result, push_attachment, push_attachment_blob, push_attachment_directory, push_attachment_file, push_attachment_file_line_range, push_attachment_git_hub_actions_job, push_attachment_git_hub_commit, push_attachment_git_hub_file, push_attachment_git_hub_file_diff, push_attachment_git_hub_file_diff_side, push_attachment_git_hub_reference, push_attachment_git_hub_reference_type, push_attachment_git_hub_release, push_attachment_git_hub_repository, push_attachment_git_hub_snippet, push_attachment_git_hub_tree_comparison, push_attachment_git_hub_tree_comparison_side, push_attachment_git_hub_url, push_attachment_selection, push_attachment_selection_details, push_attachment_selection_details_end, push_attachment_selection_details_start, push_git_hub_repo_ref, queue_begin_deferred_idle_drain_request, queue_begin_deferred_idle_drain_result, queue_consume_system_notifications_request, queued_command_handled, queued_command_not_handled, queued_command_result, queue_defer_session_idle_request, queue_duplicate_at_request, queue_duplicate_at_result, queue_enqueue_resume_pending_result, queue_finish_deferred_idle_drain_request, queue_finish_deferred_idle_drain_result, queue_has_pending_result, queue_insert_at_request, queue_insert_at_result, queue_insert_message, queue_move_item_request, queue_move_item_result, queue_pending_items, queue_pending_items_kind, queue_pending_items_result, queue_remove_at_request, queue_remove_at_result, queue_remove_most_recent_result, queue_send_now_request, queue_send_now_result, queue_set_drain_paused_request, queue_snapshot_result, queue_update_text_request, queue_update_text_result, register_event_interest_params, register_event_interest_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_host_status, remote_session_metadata_repository, remote_session_metadata_task_type, remote_session_metadata_value, remote_session_mode, remote_session_repository, response_format, run_options, sandbox_config, sandbox_config_auth, sandbox_config_source, 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, sandbox_config_user_policy_network_proxy, sandbox_config_user_policy_seatbelt, sandbox_disable_for_session_request, sandbox_disable_for_session_result, sandbox_enforcement_status, sandbox_session_change, schedule_add_at_request, schedule_add_cron_request, schedule_add_request, schedule_add_result, schedule_add_self_paced_request, schedule_entry, schedule_has_self_paced_result, schedule_list, schedule_rearm_self_paced_request, 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_message_item, send_messages_request, send_messages_result, send_mode, send_request, send_result, send_system_notification_request, server_agent_list, server_instruction_source_list, server_skill, server_skill_list, session_activity, session_agent_list_request, session_auth_login_request, session_auth_logout_user_request, session_auth_status, session_auth_switch_request, session_bulk_delete_result, session_cancel_all_background_agents_result, session_capability, session_commands_list_request, session_completion_item, session_context, session_context_host_type, session_enrich_metadata_result, session_factory_pause_at_checkpoint_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_sqlite_transaction_error, session_fs_sqlite_transaction_error_class, session_fs_sqlite_transaction_request, session_fs_sqlite_transaction_result, session_fs_sqlite_transaction_statement, session_fs_stat_request, session_fs_stat_result, session_fs_write_file_request, session_git_hub_auth_get_all_auth_available_result, session_git_hub_auth_logout_result, session_git_hub_auth_logout_user_result, session_history_compact_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_limit_prediction_baseline_data, session_limit_prediction_client_type, session_limit_prediction_details, session_limit_prediction_predict_request, session_limit_prediction_request, session_limit_prediction_result, session_limit_prediction_source, session_limit_prediction_tier, session_limit_prediction_tier_option, session_limit_prediction_unavailable_reason, session_list, session_list_entry, session_list_filter, session_load_deferred_repo_hooks_result, session_log_level, session_managed_permissions, session_managed_settings, session_mcp_apps_call_tool_result, session_metadata_snapshot, session_mode, session_model_list, session_model_list_request, session_model_price_category, 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_plugins_reload_request, session_provider_get_endpoint_request, session_prune_result, sessions_bulk_delete_request, sessions_check_in_use_request, sessions_check_in_use_result, sessions_client_metadata_entry, sessions_close_request, sessions_close_result, sessions_delete_request, sessions_enrich_metadata_request, session_set_credentials_params, session_set_credentials_result, session_settings_built_in_tool_availability_snapshot, session_settings_evaluate_predicate_request, session_settings_evaluate_predicate_result, session_settings_job_snapshot, session_settings_model_snapshot, session_settings_online_evaluation_snapshot, session_settings_predicate_name, session_settings_repo_snapshot, session_settings_snapshot, session_settings_validation_snapshot, 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_client_metadata_request, sessions_get_client_metadata_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_metadata_request, sessions_get_metadata_result, sessions_get_persisted_remote_steerable_request, sessions_get_persisted_remote_steerable_result, session_sizes, sessions_list_non_empty_session_ids_request, sessions_list_non_empty_session_ids_result, 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_prune_old_request, sessions_read_persisted_events_request, 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_visibility_status, session_working_directory_context, session_working_directory_context_host_type, settable_auth_info, settable_token_auth_info, shell_cancel_user_requested_request, shell_credentials, shell_exec_request, shell_exec_result, shell_execute_user_requested_request, shell_init_profile, shell_init_script, shell_init_script_shell, shell_kill_request, shell_kill_result, shell_kill_signal, shell_options, shutdown_request, skill, skill_discovery_path, skill_discovery_path_list, skill_discovery_scope, skill_list, skill_provider_descriptor, skill_provider_list_request, skill_provider_list_result, skill_provider_read_request, skill_provider_read_result, skills_config_set_disabled_skills_request, skills_config_set_skill_disabled_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_add_timeline_entry_result, slash_command_agent_prompt_result, slash_command_completed_result, slash_command_info, slash_command_input, slash_command_input_choice, slash_command_input_completion, slash_command_invocation_result, slash_command_kind, slash_command_model_picker_dialog, slash_command_select_subcommand_option, slash_command_select_subcommand_result, slash_command_set_model_result, slash_command_set_plan_model_result, slash_command_show_dialog_result, slash_command_text_result, slash_command_timeline_entry, subagent_settings_entry, subagent_settings_entry_context_tier, system_message_block, task_agent_info, task_agent_progress, task_client_active_status, task_client_execution_mode, task_client_info, task_client_owner, task_client_owner_kind, task_client_owner_presence, task_client_progress, task_client_status, task_client_type, task_client_update, task_complete_data, task_completion_decision, task_execution_mode, task_info, task_kind, 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_register_request, tasks_register_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_update_request, tasks_update_result, tasks_wait_for_pending_result, telemetry_set_feature_overrides_request, token_auth_info, token_provider_auth_info, tool, tool_list, tool_result, tool_result_expanded, tool_result_new_message, tool_result_type, tools_execute_request, tools_get_builtin_descriptors_request, tools_get_builtin_descriptors_result, tools_get_current_metadata_result, tools_initialize_and_validate_result, tools_list_request, tools_set_request, tools_set_result, tools_shell_descriptor_config, tools_task_complete_event_data_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_session_limits_exhausted_request, ui_handle_pending_user_input_request, ui_register_direct_auto_mode_switch_handler_result, ui_session_limits_exhausted_response, ui_session_limits_exhausted_response_action, 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_agent_metric, 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, user_setting_metadata, user_settings_get_result, user_settings_set_request, user_settings_set_result, visibility_get_result, visibility_set_request, visibility_set_result, workspace_diff_file_change, workspace_diff_file_change_type, workspace_diff_mode, workspace_diff_result, workspaces_add_summary_request, workspaces_add_summary_result, workspaces_autopilot_objective_exists_result, workspaces_checkpoints, workspaces_create_file_request, workspaces_delete_autopilot_objective_result, workspaces_diff_request, workspaces_ensure_request, workspaces_get_workspace_result, workspaces_list_checkpoints_result, workspaces_list_files_result, workspaces_read_autopilot_objective_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, workspaces_truncate_summaries_request, workspace_summary_host_type, workspaces_update_metadata_request, workspaces_workspace_details_host_type, workspaces_write_autopilot_objective_request, workspaces_write_autopilot_objective_result, session_auth_info_result, session_context_attribution, session_context_info, subagent_settings, task_progress, workspace_summary)
def to_dict(self) -> dict:
result: dict = {}
@@ -40390,6 +40853,7 @@ def to_dict(self) -> dict:
result["InstructionSourceType"] = to_enum(InstructionSourceType, self.instruction_source_type)
result["InterruptMainTurnRequest"] = to_class(InterruptMainTurnRequest, self.interrupt_main_turn_request)
result["InterruptMainTurnResult"] = to_class(InterruptMainTurnResult, self.interrupt_main_turn_result)
+ result["JsonSchemaResponseFormat"] = to_class(JSONSchemaResponseFormat, self.json_schema_response_format)
result["LlmInferenceHeaders"] = from_dict(lambda x: from_list(from_str, x), self.llm_inference_headers)
result["LlmInferenceHttpRequestChunkRequest"] = to_class(LlmInferenceHTTPRequestChunkRequest, self.llm_inference_http_request_chunk_request)
result["LlmInferenceHttpRequestChunkResult"] = to_class(LlmInferenceHTTPRequestChunkResult, self.llm_inference_http_request_chunk_result)
@@ -40406,6 +40870,7 @@ def to_dict(self) -> dict:
result["LogRequest"] = to_class(LogRequest, self.log_request)
result["LogResult"] = to_class(LogResult, self.log_result)
result["LspInitializeRequest"] = to_class(LspInitializeRequest, self.lsp_initialize_request)
+ result["ManagedMcpServerConfig"] = to_class(ManagedMCPServerConfig, self.managed_mcp_server_config)
result["ManagedSettingsReadResult"] = to_class(ManagedSettingsReadResult, self.managed_settings_read_result)
result["MarketplaceAddResult"] = to_class(MarketplaceAddResult, self.marketplace_add_result)
result["MarketplaceBrowseResult"] = to_class(MarketplaceBrowseResult, self.marketplace_browse_result)
@@ -40773,8 +41238,19 @@ def to_dict(self) -> dict:
result["PluginUpdateAllEntry"] = to_class(PluginUpdateAllEntry, self.plugin_update_all_entry)
result["PluginUpdateAllResult"] = to_class(PluginUpdateAllResult, self.plugin_update_all_result)
result["PluginUpdateResult"] = to_class(PluginUpdateResult, self.plugin_update_result)
+ result["ProtocolAppendMode"] = to_enum(ProtocolAppendMode, self.protocol_append_mode)
+ result["ProtocolCustomizeMode"] = to_enum(ProtocolCustomizeMode, self.protocol_customize_mode)
result["ProtocolExternalToolDefer"] = to_enum(MCPServerConfigDeferTools, self.protocol_external_tool_defer)
result["ProtocolExternalToolDefinition"] = to_class(ProtocolExternalToolDefinition, self.protocol_external_tool_definition)
+ result["ProtocolMarkerSectionOverride"] = to_class(ProtocolMarkerSectionOverride, self.protocol_marker_section_override)
+ result["ProtocolReplaceMode"] = to_enum(ProtocolReplaceMode, self.protocol_replace_mode)
+ result["ProtocolSectionOverride"] = to_class(ProtocolSectionOverride, self.protocol_section_override)
+ result["ProtocolStaticSectionAction"] = to_enum(ProtocolStaticSectionAction, self.protocol_static_section_action)
+ result["ProtocolStaticSectionOverride"] = to_class(ProtocolStaticSectionOverride, self.protocol_static_section_override)
+ result["ProtocolSystemMessageAppendConfig"] = to_class(ProtocolSystemMessageAppendConfig, self.protocol_system_message_append_config)
+ result["ProtocolSystemMessageConfig"] = to_class(ProtocolSystemMessageConfig, self.protocol_system_message_config)
+ result["ProtocolSystemMessageCustomizeConfig"] = to_class(ProtocolSystemMessageCustomizeConfig, self.protocol_system_message_customize_config)
+ result["ProtocolSystemMessageReplaceConfig"] = to_class(ProtocolSystemMessageReplaceConfig, self.protocol_system_message_replace_config)
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)
@@ -40846,8 +41322,6 @@ def to_dict(self) -> dict:
result["QueueUpdateTextResult"] = to_class(QueueUpdateTextResult, self.queue_update_text_result)
result["RegisterEventInterestParams"] = to_class(RegisterEventInterestParams, self.register_event_interest_params)
result["RegisterEventInterestResult"] = to_class(RegisterEventInterestResult, self.register_event_interest_result)
- result["RegisterExtensionToolsParams"] = to_class(_RegisterExtensionToolsParams, self.register_extension_tools_params)
- result["RegisterExtensionToolsResult"] = to_class(_RegisterExtensionToolsResult, self.register_extension_tools_result)
result["ReleaseEventInterestParams"] = to_class(ReleaseEventInterestParams, self.release_event_interest_params)
result["RemoteControlConfig"] = to_class(RemoteControlConfig, self.remote_control_config)
result["RemoteControlConfigExistingMcSession"] = to_class(RemoteControlConfigExistingMcSession, self.remote_control_config_existing_mc_session)
@@ -40870,6 +41344,7 @@ def to_dict(self) -> dict:
result["RemoteSessionMetadataValue"] = to_class(RemoteSessionMetadataValue, self.remote_session_metadata_value)
result["RemoteSessionMode"] = to_enum(RemoteSessionMode, self.remote_session_mode)
result["RemoteSessionRepository"] = to_class(RemoteSessionRepository, self.remote_session_repository)
+ result["ResponseFormat"] = to_class(ResponseFormat, self.response_format)
result["RunOptions"] = to_class(RunOptions, self.run_options)
result["SandboxConfig"] = to_class(SandboxConfig, self.sandbox_config)
result["SandboxConfigAuth"] = to_class(SandboxConfigAuth, self.sandbox_config_auth)
@@ -40884,6 +41359,7 @@ def to_dict(self) -> dict:
result["SandboxDisableForSessionRequest"] = to_class(SandboxDisableForSessionRequest, self.sandbox_disable_for_session_request)
result["SandboxDisableForSessionResult"] = to_class(SandboxDisableForSessionResult, self.sandbox_disable_for_session_result)
result["SandboxEnforcementStatus"] = to_class(SandboxEnforcementStatus, self.sandbox_enforcement_status)
+ result["SandboxSessionChange"] = to_enum(SandboxSessionChange, self.sandbox_session_change)
result["ScheduleAddAtRequest"] = to_class(ScheduleAddAtRequest, self.schedule_add_at_request)
result["ScheduleAddCronRequest"] = to_class(ScheduleAddCronRequest, self.schedule_add_cron_request)
result["ScheduleAddRequest"] = to_class(ScheduleAddRequest, self.schedule_add_request)
@@ -41060,7 +41536,6 @@ def to_dict(self) -> dict:
result["SessionSource"] = to_enum(SessionSource, self.session_source)
result["SessionsPruneOldRequest"] = to_class(SessionsPruneOldRequest, self.sessions_prune_old_request)
result["SessionsReadPersistedEventsRequest"] = to_class(SessionsReadPersistedEventsRequest, self.sessions_read_persisted_events_request)
- result["SessionsRegisterExtensionToolsOnSessionOptions"] = to_class(SessionsRegisterExtensionToolsOnSessionOptions, self.sessions_register_extension_tools_on_session_options)
result["SessionsReleaseLockRequest"] = to_class(SessionsReleaseLockRequest, self.sessions_release_lock_request)
result["SessionsReleaseLockResult"] = to_class(SessionsReleaseLockResult, self.sessions_release_lock_result)
result["SessionsReloadPluginHooksRequest"] = to_class(SessionsReloadPluginHooksRequest, self.sessions_reload_plugin_hooks_request)
@@ -41132,6 +41607,7 @@ def to_dict(self) -> dict:
result["SlashCommandTimelineEntry"] = to_class(SlashCommandTimelineEntry, self.slash_command_timeline_entry)
result["SubagentSettingsEntry"] = to_class(SubagentSettingsEntry, self.subagent_settings_entry)
result["SubagentSettingsEntryContextTier"] = to_enum(SubagentSettingsEntryContextTier, self.subagent_settings_entry_context_tier)
+ result["SystemMessageBlock"] = to_class(SystemMessageBlock, self.system_message_block)
result["TaskAgentInfo"] = to_class(TaskAgentInfo, self.task_agent_info)
result["TaskAgentProgress"] = to_class(TaskAgentProgress, self.task_agent_progress)
result["TaskClientActiveStatus"] = to_enum(TaskClientActiveStatus, self.task_client_active_status)
@@ -42379,13 +42855,8 @@ async def _get_board_entry_count(self, params: SessionsGetBoardEntryCountRequest
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return SessionsGetBoardEntryCountResult.from_dict(await self._client.request("sessions.getBoardEntryCount", params_dict, **_timeout_kwargs(timeout)))
- async def _register_extension_tools_on_session(self, params: _RegisterExtensionToolsParams, *, timeout: float | None = None) -> _RegisterExtensionToolsResult:
- "Registers extension-provided tools on the given session, gated by an optional `enabled` callback. Returns an opaque unsubscribe function the caller must invoke to deregister the tools when the extension is torn down. Marked internal because `loader`, `enabled`, and the returned `unsubscribe` are in-process handles that cannot cross the JSON-RPC boundary. Disappears once extension discovery / launch / tool registration are owned by the runtime: SDK consumers will pass pure config (search paths, disabled ids) via `SessionOptions` and the runtime will resolve, launch, register, and tear down extensions itself.\n\nArgs:\n params: Params to attach an extension loader's tools to a session.\n\nReturns:\n Handle for releasing the extension tool registration.\n\n:meta private:\n\nInternal SDK API; not part of the public surface."
- params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
- return _RegisterExtensionToolsResult.from_dict(await self._client.request("sessions.registerExtensionToolsOnSession", params_dict, **_timeout_kwargs(timeout)))
-
async def _configure_session_extensions(self, params: _ConfigureSessionExtensionsParams, *, timeout: float | None = None) -> None:
- "Attaches (or detaches) an in-process ExtensionController delegate for the given session, used by shared-API surfaces that need to query or modify the session's extension state. Pass `controller: undefined` to detach. Marked internal because the controller is an in-process object that cannot cross the JSON-RPC boundary. Disappears alongside `registerExtensionToolsOnSession`: once the runtime owns extension management, the public surface exposes list/enable/disable/reload as dedicated RPCs served by the runtime.\n\nArgs:\n params: Params to attach or detach an in-process ExtensionController delegate.\n\n:meta private:\n\nInternal SDK API; not part of the public surface."
+ "Attaches (or detaches) an in-process ExtensionController delegate for the given session in a local host adapter. Pass `controller: undefined` to detach. Internal because the controller cannot cross the JSON-RPC boundary; the runtime manages its own session extension service.\n\nArgs:\n params: Params to attach or detach an in-process ExtensionController delegate.\n\n:meta private:\n\nInternal SDK API; not part of the public surface."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
await self._client.request("sessions.configureSessionExtensions", params_dict, **_timeout_kwargs(timeout))
@@ -42443,7 +42914,7 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def collect_logs(self, params: DebugCollectLogsRequest, *, timeout: float | None = None) -> DebugCollectLogsResult:
- "Collects a redacted session debug log bundle into a local archive or staging directory. The runtime includes session-owned logs by default and accepts caller-provided diagnostic entries so host applications can add their own files without changing this API shape.\n\nArgs:\n params: Options for collecting a redacted session debug bundle.\n\nReturns:\n Result of collecting a redacted debug bundle."
+ "Collects a session debug log bundle into a local archive or staging directory. Logs are redacted by default; redaction can be configured per caller-provided diagnostic entry. The runtime includes session-owned logs by default and accepts caller-provided diagnostic entries so host applications can add their own files without changing this API shape.\n\nArgs:\n params: Options for collecting a session debug bundle with configurable redaction.\n\nReturns:\n Result of collecting a session debug bundle."
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 DebugCollectLogsResult.from_dict(await self._client.request("session.debug.collectLogs", params_dict, **_timeout_kwargs(timeout)))
@@ -44656,6 +45127,7 @@ async def handle_git_hub_token_get_token(params: dict) -> dict | None:
"AccountLogoutRequest",
"AccountLogoutResult",
"AccountQuotaSnapshot",
+ "Action",
"AdaptiveThinkingSupport",
"AdditionalContentExclusionPolicyScope",
"AgentApi",
@@ -45068,6 +45540,7 @@ async def handle_git_hub_token_get_token(params: dict) -> dict | None:
"InstructionsGetSourcesResult",
"InterruptMainTurnRequest",
"InterruptMainTurnResult",
+ "JSONSchemaResponseFormat",
"KindEnum",
"LimitPredictionApi",
"LlmInferenceHTTPRequestChunkRequest",
@@ -45240,6 +45713,7 @@ async def handle_git_hub_token_get_token(params: dict) -> dict | None:
"MCPToolUIVisibility",
"MCPTools",
"MCPUnregisterExternalClientRequest",
+ "ManagedMCPServerConfig",
"ManagedSettingsReadResult",
"MarketplaceAddResult",
"MarketplaceBrowseResult",
@@ -45522,8 +45996,21 @@ async def handle_git_hub_token_get_token(params: dict) -> dict | None:
"PluginsReloadRequest",
"PluginsUninstallRequest",
"PluginsUpdateRequest",
+ "ProtocolAppendMode",
+ "ProtocolCustomizeMode",
"ProtocolExternalToolDefer",
"ProtocolExternalToolDefinition",
+ "ProtocolMarkerSectionOverride",
+ "ProtocolMode",
+ "ProtocolReplaceMode",
+ "ProtocolSectionOverride",
+ "ProtocolSectionOverrideAction",
+ "ProtocolStaticSectionAction",
+ "ProtocolStaticSectionOverride",
+ "ProtocolSystemMessageAppendConfig",
+ "ProtocolSystemMessageConfig",
+ "ProtocolSystemMessageCustomizeConfig",
+ "ProtocolSystemMessageReplaceConfig",
"ProviderAddRequest",
"ProviderAddResult",
"ProviderApi",
@@ -45645,6 +46132,8 @@ async def handle_git_hub_token_get_token(params: dict) -> dict | None:
"RemoteSessionMetadataValue",
"RemoteSessionMode",
"RemoteSessionRepository",
+ "ResponseFormat",
+ "ResponseFormatType",
"RunOptions",
"SandboxApi",
"SandboxConfig",
@@ -45659,6 +46148,7 @@ async def handle_git_hub_token_get_token(params: dict) -> dict | None:
"SandboxDisableForSessionRequest",
"SandboxDisableForSessionResult",
"SandboxEnforcementStatus",
+ "SandboxSessionChange",
"Saved",
"ScheduleAddAtRequest",
"ScheduleAddCronRequest",
@@ -45882,7 +46372,6 @@ async def handle_git_hub_token_get_token(params: dict) -> dict | None:
"SessionsOpenStatus",
"SessionsPruneOldRequest",
"SessionsReadPersistedEventsRequest",
- "SessionsRegisterExtensionToolsOnSessionOptions",
"SessionsReleaseLockRequest",
"SessionsReleaseLockResult",
"SessionsReloadPluginHooksRequest",
@@ -45959,6 +46448,7 @@ async def handle_git_hub_token_get_token(params: dict) -> dict | None:
"SubagentSettings",
"SubagentSettingsEntry",
"SubagentSettingsEntryContextTier",
+ "SystemMessageBlock",
"TaskAgentInfo",
"TaskAgentInfoType",
"TaskAgentProgress",
diff --git a/python/copilot/generated/session_events.py b/python/copilot/generated/session_events.py
index c46d222656..cecdbe1dd7 100644
--- a/python/copilot/generated/session_events.py
+++ b/python/copilot/generated/session_events.py
@@ -205,6 +205,12 @@ class SessionEventType(Enum):
TOOL_EXECUTION_COMPLETE = "tool.execution_complete"
TOOL_SEARCH_ACTIVATED = "tool_search.activated"
SKILL_INVOKED = "skill.invoked"
+ # Experimental: this event is part of an experimental API and may change or be removed.
+ SKILL_INVOKED_REF = "skill.invoked_ref"
+ # Experimental: this event is part of an experimental API and may change or be removed.
+ SKILL_CONTEXT_DELIVERED = "skill.context_delivered"
+ # Experimental: this event is part of an experimental API and may change or be removed.
+ SKILL_CONTEXT_DELIVERED_REF = "skill.context_delivered_ref"
SANDBOX_DECISION = "sandbox.decision"
SUBAGENT_STARTED = "subagent.started"
SUBAGENT_CONFIGURED = "subagent.configured"
@@ -2599,6 +2605,7 @@ class AssistantMessageData:
fusion: FusionAttribution | None = None
interaction_id: str | None = None
model: str | None = None
+ originating_message_id: str | None = None
output_tokens: int | None = None
# Deprecated: this field is deprecated.
parent_tool_call_id: str | None = None
@@ -2628,6 +2635,7 @@ def from_dict(obj: Any) -> "AssistantMessageData":
fusion = from_union([from_none, FusionAttribution.from_dict], obj.get("fusion"))
interaction_id = from_union([from_none, from_str], obj.get("interactionId"))
model = from_union([from_none, from_str], obj.get("model"))
+ originating_message_id = from_union([from_none, from_str], obj.get("originatingMessageId"))
output_tokens = from_union([from_none, from_int], obj.get("outputTokens"))
parent_tool_call_id = from_union([from_none, from_str], obj.get("parentToolCallId"))
phase = from_union([from_none, from_str], obj.get("phase"))
@@ -2653,6 +2661,7 @@ def from_dict(obj: Any) -> "AssistantMessageData":
fusion=fusion,
interaction_id=interaction_id,
model=model,
+ originating_message_id=originating_message_id,
output_tokens=output_tokens,
parent_tool_call_id=parent_tool_call_id,
phase=phase,
@@ -2690,6 +2699,8 @@ def to_dict(self) -> dict:
result["interactionId"] = from_union([from_none, from_str], self.interaction_id)
if self.model is not None:
result["model"] = from_union([from_none, from_str], self.model)
+ if self.originating_message_id is not None:
+ result["originatingMessageId"] = from_union([from_none, from_str], self.originating_message_id)
if self.output_tokens is not None:
result["outputTokens"] = from_union([from_none, to_int], self.output_tokens)
if self.parent_tool_call_id is not None:
@@ -5580,6 +5591,7 @@ class McpServersLoadedServer:
"A single MCP server status summary in `session.mcp_servers_loaded`, including name, status, source, transport, and plugin metadata."
name: str
status: McpServerStatus
+ display_name: str | None = None
error: str | None = None
plugin_name: str | None = None
plugin_version: str | None = None
@@ -5592,6 +5604,7 @@ def from_dict(obj: Any) -> "McpServersLoadedServer":
assert isinstance(obj, dict)
name = from_str(obj.get("name"))
status = parse_enum(McpServerStatus, obj.get("status"))
+ display_name = from_union([from_none, from_str], obj.get("displayName"))
error = from_union([from_none, from_str], obj.get("error"))
plugin_name = from_union([from_none, from_str], obj.get("pluginName"))
plugin_version = from_union([from_none, from_str], obj.get("pluginVersion"))
@@ -5601,6 +5614,7 @@ def from_dict(obj: Any) -> "McpServersLoadedServer":
return McpServersLoadedServer(
name=name,
status=status,
+ display_name=display_name,
error=error,
plugin_name=plugin_name,
plugin_version=plugin_version,
@@ -5613,6 +5627,8 @@ def to_dict(self) -> dict:
result: dict = {}
result["name"] = from_str(self.name)
result["status"] = to_enum(McpServerStatus, self.status)
+ if self.display_name is not None:
+ result["displayName"] = from_union([from_none, from_str], self.display_name)
if self.error is not None:
result["error"] = from_union([from_none, from_str], self.error)
if self.plugin_name is not None:
@@ -9783,6 +9799,72 @@ def to_dict(self) -> dict:
return result
+@dataclass
+class SkillContextDeliveredData:
+ "Exact skill context delivered to the model during a tool phase. This is not a user submission or another skill invocation."
+ content: str
+ source: str
+ interaction_id: str | None = None
+
+ @staticmethod
+ def from_dict(obj: Any) -> "SkillContextDeliveredData":
+ assert isinstance(obj, dict)
+ content = from_str(obj.get("content"))
+ source = from_str(obj.get("source"))
+ interaction_id = from_union([from_none, from_str], obj.get("interactionId"))
+ return SkillContextDeliveredData(
+ content=content,
+ source=source,
+ interaction_id=interaction_id,
+ )
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["content"] = from_str(self.content)
+ result["source"] = from_str(self.source)
+ if self.interaction_id is not None:
+ result["interactionId"] = from_union([from_none, from_str], self.interaction_id)
+ return result
+
+
+@dataclass
+class SkillContextDeliveredRefData:
+ "Internal durable receipt that reconstructs exact model-visible skill context from earlier session content."
+ content_id: str
+ source: str
+ interaction_id: str | None = None
+ prefix: str | None = None
+ suffix: str | None = None
+
+ @staticmethod
+ def from_dict(obj: Any) -> "SkillContextDeliveredRefData":
+ assert isinstance(obj, dict)
+ content_id = from_str(obj.get("contentId"))
+ source = from_str(obj.get("source"))
+ interaction_id = from_union([from_none, from_str], obj.get("interactionId"))
+ prefix = from_union([from_none, from_str], obj.get("prefix"))
+ suffix = from_union([from_none, from_str], obj.get("suffix"))
+ return SkillContextDeliveredRefData(
+ content_id=content_id,
+ source=source,
+ interaction_id=interaction_id,
+ prefix=prefix,
+ suffix=suffix,
+ )
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["contentId"] = from_str(self.content_id)
+ result["source"] = from_str(self.source)
+ if self.interaction_id is not None:
+ result["interactionId"] = from_union([from_none, from_str], self.interaction_id)
+ if self.prefix is not None:
+ result["prefix"] = from_union([from_none, from_str], self.prefix)
+ if self.suffix is not None:
+ result["suffix"] = from_union([from_none, from_str], self.suffix)
+ return result
+
+
@dataclass
class SkillInvokedData:
"Skill invocation details including content, allowed tools, and plugin metadata"
@@ -9850,6 +9932,77 @@ def to_dict(self) -> dict:
return result
+@dataclass
+class SkillInvokedRefData:
+ "Internal durable skill invocation receipt whose content resolves from an earlier inline skill event in the same session."
+ content_id: str
+ content_length: int
+ name: str
+ path: str
+ allowed_tools: list[str] | None = None
+ description: str | None = None
+ disable_model_invocation: bool | None = None
+ model: str | None = None
+ plugin_name: str | None = None
+ plugin_version: str | None = None
+ source: str | None = None
+ trigger: SkillInvokedTrigger | None = None
+
+ @staticmethod
+ def from_dict(obj: Any) -> "SkillInvokedRefData":
+ assert isinstance(obj, dict)
+ content_id = from_str(obj.get("contentId"))
+ content_length = from_int(obj.get("contentLength"))
+ name = from_str(obj.get("name"))
+ path = from_str(obj.get("path"))
+ allowed_tools = from_union([from_none, lambda x: from_list(from_str, x)], obj.get("allowedTools"))
+ description = from_union([from_none, from_str], obj.get("description"))
+ disable_model_invocation = from_union([from_none, from_bool], obj.get("disableModelInvocation"))
+ model = from_union([from_none, from_str], obj.get("model"))
+ plugin_name = from_union([from_none, from_str], obj.get("pluginName"))
+ plugin_version = from_union([from_none, from_str], obj.get("pluginVersion"))
+ source = from_union([from_none, from_str], obj.get("source"))
+ trigger = from_union([from_none, lambda x: parse_enum(SkillInvokedTrigger, x)], obj.get("trigger"))
+ return SkillInvokedRefData(
+ content_id=content_id,
+ content_length=content_length,
+ name=name,
+ path=path,
+ allowed_tools=allowed_tools,
+ description=description,
+ disable_model_invocation=disable_model_invocation,
+ model=model,
+ plugin_name=plugin_name,
+ plugin_version=plugin_version,
+ source=source,
+ trigger=trigger,
+ )
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["contentId"] = from_str(self.content_id)
+ result["contentLength"] = to_int(self.content_length)
+ result["name"] = from_str(self.name)
+ result["path"] = from_str(self.path)
+ if self.allowed_tools is not None:
+ result["allowedTools"] = from_union([from_none, lambda x: from_list(from_str, x)], self.allowed_tools)
+ if self.description is not None:
+ result["description"] = from_union([from_none, from_str], self.description)
+ if self.disable_model_invocation is not None:
+ result["disableModelInvocation"] = from_union([from_none, from_bool], self.disable_model_invocation)
+ if self.model is not None:
+ result["model"] = from_union([from_none, from_str], self.model)
+ if self.plugin_name is not None:
+ result["pluginName"] = from_union([from_none, from_str], self.plugin_name)
+ if self.plugin_version is not None:
+ result["pluginVersion"] = from_union([from_none, from_str], self.plugin_version)
+ if self.source is not None:
+ result["source"] = from_union([from_none, from_str], self.source)
+ if self.trigger is not None:
+ result["trigger"] = from_union([from_none, lambda x: to_enum(SkillInvokedTrigger, x)], self.trigger)
+ return result
+
+
@dataclass
class SkillsLoadedSkill:
"A single resolved skill in `session.skills_loaded`, including source, invocability, enabled state, path, and argument hint."
@@ -10156,6 +10309,7 @@ class SubagentStartedData:
execution_mode: str | None = None
factory_run_id: str | None = None
model: str | None = None
+ model_selection_source: SubagentModelSelectionSource | None = None
parent_id: str | None = None
resumable: bool | None = None
task_model_source: SubagentTaskModelSource | None = None
@@ -10171,6 +10325,7 @@ def from_dict(obj: Any) -> "SubagentStartedData":
execution_mode = from_union([from_none, from_str], obj.get("executionMode"))
factory_run_id = from_union([from_none, from_str], obj.get("factoryRunId"))
model = from_union([from_none, from_str], obj.get("model"))
+ model_selection_source = from_union([from_none, lambda x: parse_enum(SubagentModelSelectionSource, x)], obj.get("modelSelectionSource"))
parent_id = from_union([from_none, from_str], obj.get("parentId"))
resumable = from_union([from_none, from_bool], obj.get("resumable"))
task_model_source = from_union([from_none, lambda x: parse_enum(SubagentTaskModelSource, x)], obj.get("taskModelSource"))
@@ -10183,6 +10338,7 @@ def from_dict(obj: Any) -> "SubagentStartedData":
execution_mode=execution_mode,
factory_run_id=factory_run_id,
model=model,
+ model_selection_source=model_selection_source,
parent_id=parent_id,
resumable=resumable,
task_model_source=task_model_source,
@@ -10202,6 +10358,8 @@ def to_dict(self) -> dict:
result["factoryRunId"] = from_union([from_none, from_str], self.factory_run_id)
if self.model is not None:
result["model"] = from_union([from_none, from_str], self.model)
+ if self.model_selection_source is not None:
+ result["modelSelectionSource"] = from_union([from_none, lambda x: to_enum(SubagentModelSelectionSource, x)], self.model_selection_source)
if self.parent_id is not None:
result["parentId"] = from_union([from_none, from_str], self.parent_id)
if self.resumable is not None:
@@ -11349,6 +11507,8 @@ class ToolExecutionStartData:
display_verbatim: bool | None = None
# Experimental: this field is part of an experimental API and may change or be removed.
fusion: FusionAttribution | None = None
+ mcp_config_server_name: str | None = None
+ mcp_config_source: McpServerSource | None = None
mcp_server_name: str | None = None
mcp_tool_name: str | None = None
mcp_transport: McpServerTransport | None = None
@@ -11368,6 +11528,8 @@ def from_dict(obj: Any) -> "ToolExecutionStartData":
arguments = obj.get("arguments")
display_verbatim = from_union([from_none, from_bool], obj.get("displayVerbatim"))
fusion = from_union([from_none, FusionAttribution.from_dict], obj.get("fusion"))
+ mcp_config_server_name = from_union([from_none, from_str], obj.get("mcpConfigServerName"))
+ mcp_config_source = from_union([from_none, lambda x: parse_enum(McpServerSource, x)], obj.get("mcpConfigSource"))
mcp_server_name = from_union([from_none, from_str], obj.get("mcpServerName"))
mcp_tool_name = from_union([from_none, from_str], obj.get("mcpToolName"))
mcp_transport = from_union([from_none, lambda x: parse_enum(McpServerTransport, x)], obj.get("mcpTransport"))
@@ -11383,6 +11545,8 @@ def from_dict(obj: Any) -> "ToolExecutionStartData":
arguments=arguments,
display_verbatim=display_verbatim,
fusion=fusion,
+ mcp_config_server_name=mcp_config_server_name,
+ mcp_config_source=mcp_config_source,
mcp_server_name=mcp_server_name,
mcp_tool_name=mcp_tool_name,
mcp_transport=mcp_transport,
@@ -11404,6 +11568,10 @@ def to_dict(self) -> dict:
result["displayVerbatim"] = from_union([from_none, from_bool], self.display_verbatim)
if self.fusion is not None:
result["fusion"] = from_union([from_none, lambda x: to_class(FusionAttribution, x)], self.fusion)
+ if self.mcp_config_server_name is not None:
+ result["mcpConfigServerName"] = from_union([from_none, from_str], self.mcp_config_server_name)
+ if self.mcp_config_source is not None:
+ result["mcpConfigSource"] = from_union([from_none, lambda x: to_enum(McpServerSource, x)], self.mcp_config_source)
if self.mcp_server_name is not None:
result["mcpServerName"] = from_union([from_none, from_str], self.mcp_server_name)
if self.mcp_tool_name is not None:
@@ -12703,6 +12871,8 @@ class McpHeadersRefreshCompletedOutcome(Enum):
HEADERS = "headers"
# The host responded with no dynamic headers.
NONE = "none"
+ # The host credential broker rejected or failed the refresh.
+ ERROR = "error"
# No response arrived within the bounded window.
TIMEOUT = "timeout"
@@ -12738,7 +12908,7 @@ class McpOauthRequestReason(Enum):
class McpServerSource(Enum):
- "Configuration source: user, workspace, plugin, or builtin"
+ "Configuration source: user, workspace, plugin, builtin, or managed"
# Server configured in the user's global MCP configuration.
USER = "user"
# Server configured by the current workspace.
@@ -12747,6 +12917,8 @@ class McpServerSource(Enum):
PLUGIN = "plugin"
# Server bundled with the runtime.
BUILTIN = "builtin"
+ # Server supplied by a trusted host-managed catalog.
+ MANAGED = "managed"
class McpServerStatus(Enum):
@@ -13183,7 +13355,7 @@ class WorkspaceFileChangedOperation(Enum):
UPDATE = "update"
-SessionEventData = SessionStartData | SessionResumeData | SessionRemoteSteerableChangedData | SessionErrorData | SessionIdleData | SessionTitleChangedData | SessionScheduleCreatedData | SessionScheduleCancelledData | SessionScheduleRearmedData | SessionAutopilotObjectiveChangedData | SessionInfoData | SessionWarningData | SessionModelChangeData | SessionAutoTierRecommendationData | SessionAutoTierSwitchFailedData | SessionModeChangedData | SessionModeNoticeDeliveredData | SessionSessionLimitsChangedData | SessionPermissionsChangedData | SessionPlanChangedData | SessionTodosChangedData | SessionWorkspaceFileChangedData | SessionHandoffData | SessionTruncationData | SessionSnapshotRewindData | SessionShutdownData | SessionUsageCheckpointData | SessionContextChangedData | SessionUsageInfoData | SessionContextClearedData | SessionCompactionStartData | SessionCompactionCompleteData | SessionTaskCompleteData | SessionCompletionReceiptData | SessionFusionRouteStartedData | SessionFusionRouteFailedData | SessionFusionResolvedData | SessionFusionCompletedData | UserMessageData | PendingMessagesModifiedData | AssistantTurnStartData | AssistantTurnRetryData | AgentInterruptedData | AssistantIntentData | AssistantFusionPhaseStartedData | AssistantFusionPhaseActivityData | AssistantFusionPhaseCompletedData | AssistantFusionPhaseFailedData | AssistantServerToolProgressData | AssistantReasoningData | AssistantReasoningDeltaData | AssistantToolCallDeltaData | AssistantStreamingDeltaData | AssistantMessageData | AssistantMessageStartData | AssistantMessageDeltaData | AssistantTurnEndData | AssistantIdleData | AssistantUsageData | PromptCacheBreakData | ModelCallFailureData | ModelCallFinishedData | ModelCallStartData | AbortData | ToolUserRequestedData | ToolExecutionStartData | ToolExecutionPartialResultData | ToolExecutionProgressData | ToolExecutionCompleteData | ToolSearchActivatedData | SkillInvokedData | SandboxDecisionData | SubagentStartedData | SubagentConfiguredData | SubagentCompletedData | SubagentFailedData | SubagentSelectedData | SubagentDeselectedData | HookStartData | HookEndData | HookProgressData | SessionBinaryAssetData | SystemMessageData | SystemNotificationData | PermissionRequestedData | PermissionCompletedData | PermissionCarriedForwardData | PermissionMessageAuthorizationData | PermissionMessageAuthorizationReadData | PermissionMessageAuthorizationDegradedData | UserInputRequestedData | UserInputCompletedData | ElicitationRequestedData | ElicitationCompletedData | SamplingRequestedData | SamplingCompletedData | McpOauthRequiredData | McpOauthCompletedData | McpHeadersRefreshRequiredData | McpHeadersRefreshCompletedData | SessionCustomNotificationData | UiEphemeralQueryData | ExternalToolRequestedData | ExternalToolCompletedData | CommandQueuedData | CommandExecuteData | CommandCompletedData | AutoModeSwitchRequestedData | AutoModeSwitchCompletedData | SessionLimitsExhaustedRequestedData | SessionLimitsExhaustedCompletedData | SessionAutoModeResolvedData | SessionManagedSettingsResolvedData | SessionManagedSettingsEnforcedData | CommandsChangedData | CapabilitiesChangedData | ExitPlanModeRequestedData | ExitPlanModeCompletedData | SessionToolsUpdatedData | SessionBackgroundTasksChangedData | FactoryRunUpdatedData | FactoryRunStartedData | FactoryRunSettledData | SessionSkillsLoadedData | SessionCustomAgentsUpdatedData | SessionMcpServersLoadedData | SessionMcpServerStatusChangedData | SessionMcpServerRemovedData | SessionMcpServerNeedsReconnectData | McpToolsListChangedData | McpResourcesListChangedData | McpPromptsListChangedData | SessionExtensionsLoadedData | SessionCanvasOpenedData | SessionCanvasRegistryChangedData | SessionCanvasClosedData | SessionCanvasUnavailableData | SessionCanvasRecordedData | SessionCanvasRemovedData | SessionExtensionsAttachmentsPushedData | McpAppToolCallCompleteData | RawSessionEventData | Data
+SessionEventData = SessionStartData | SessionResumeData | SessionRemoteSteerableChangedData | SessionErrorData | SessionIdleData | SessionTitleChangedData | SessionScheduleCreatedData | SessionScheduleCancelledData | SessionScheduleRearmedData | SessionAutopilotObjectiveChangedData | SessionInfoData | SessionWarningData | SessionModelChangeData | SessionAutoTierRecommendationData | SessionAutoTierSwitchFailedData | SessionModeChangedData | SessionModeNoticeDeliveredData | SessionSessionLimitsChangedData | SessionPermissionsChangedData | SessionPlanChangedData | SessionTodosChangedData | SessionWorkspaceFileChangedData | SessionHandoffData | SessionTruncationData | SessionSnapshotRewindData | SessionShutdownData | SessionUsageCheckpointData | SessionContextChangedData | SessionUsageInfoData | SessionContextClearedData | SessionCompactionStartData | SessionCompactionCompleteData | SessionTaskCompleteData | SessionCompletionReceiptData | SessionFusionRouteStartedData | SessionFusionRouteFailedData | SessionFusionResolvedData | SessionFusionCompletedData | UserMessageData | PendingMessagesModifiedData | AssistantTurnStartData | AssistantTurnRetryData | AgentInterruptedData | AssistantIntentData | AssistantFusionPhaseStartedData | AssistantFusionPhaseActivityData | AssistantFusionPhaseCompletedData | AssistantFusionPhaseFailedData | AssistantServerToolProgressData | AssistantReasoningData | AssistantReasoningDeltaData | AssistantToolCallDeltaData | AssistantStreamingDeltaData | AssistantMessageData | AssistantMessageStartData | AssistantMessageDeltaData | AssistantTurnEndData | AssistantIdleData | AssistantUsageData | PromptCacheBreakData | ModelCallFailureData | ModelCallFinishedData | ModelCallStartData | AbortData | ToolUserRequestedData | ToolExecutionStartData | ToolExecutionPartialResultData | ToolExecutionProgressData | ToolExecutionCompleteData | ToolSearchActivatedData | SkillInvokedData | SkillInvokedRefData | SkillContextDeliveredData | SkillContextDeliveredRefData | SandboxDecisionData | SubagentStartedData | SubagentConfiguredData | SubagentCompletedData | SubagentFailedData | SubagentSelectedData | SubagentDeselectedData | HookStartData | HookEndData | HookProgressData | SessionBinaryAssetData | SystemMessageData | SystemNotificationData | PermissionRequestedData | PermissionCompletedData | PermissionCarriedForwardData | PermissionMessageAuthorizationData | PermissionMessageAuthorizationReadData | PermissionMessageAuthorizationDegradedData | UserInputRequestedData | UserInputCompletedData | ElicitationRequestedData | ElicitationCompletedData | SamplingRequestedData | SamplingCompletedData | McpOauthRequiredData | McpOauthCompletedData | McpHeadersRefreshRequiredData | McpHeadersRefreshCompletedData | SessionCustomNotificationData | UiEphemeralQueryData | ExternalToolRequestedData | ExternalToolCompletedData | CommandQueuedData | CommandExecuteData | CommandCompletedData | AutoModeSwitchRequestedData | AutoModeSwitchCompletedData | SessionLimitsExhaustedRequestedData | SessionLimitsExhaustedCompletedData | SessionAutoModeResolvedData | SessionManagedSettingsResolvedData | SessionManagedSettingsEnforcedData | CommandsChangedData | CapabilitiesChangedData | ExitPlanModeRequestedData | ExitPlanModeCompletedData | SessionToolsUpdatedData | SessionBackgroundTasksChangedData | FactoryRunUpdatedData | FactoryRunStartedData | FactoryRunSettledData | SessionSkillsLoadedData | SessionCustomAgentsUpdatedData | SessionMcpServersLoadedData | SessionMcpServerStatusChangedData | SessionMcpServerRemovedData | SessionMcpServerNeedsReconnectData | McpToolsListChangedData | McpResourcesListChangedData | McpPromptsListChangedData | SessionExtensionsLoadedData | SessionCanvasOpenedData | SessionCanvasRegistryChangedData | SessionCanvasClosedData | SessionCanvasUnavailableData | SessionCanvasRecordedData | SessionCanvasRemovedData | SessionExtensionsAttachmentsPushedData | McpAppToolCallCompleteData | RawSessionEventData | Data
@dataclass
@@ -13280,6 +13452,9 @@ def from_dict(obj: Any) -> "SessionEvent":
case SessionEventType.TOOL_EXECUTION_COMPLETE: data = ToolExecutionCompleteData.from_dict(data_obj)
case SessionEventType.TOOL_SEARCH_ACTIVATED: data = ToolSearchActivatedData.from_dict(data_obj)
case SessionEventType.SKILL_INVOKED: data = SkillInvokedData.from_dict(data_obj)
+ case SessionEventType.SKILL_INVOKED_REF: data = SkillInvokedRefData.from_dict(data_obj)
+ case SessionEventType.SKILL_CONTEXT_DELIVERED: data = SkillContextDeliveredData.from_dict(data_obj)
+ case SessionEventType.SKILL_CONTEXT_DELIVERED_REF: data = SkillContextDeliveredRefData.from_dict(data_obj)
case SessionEventType.SANDBOX_DECISION: data = SandboxDecisionData.from_dict(data_obj)
case SessionEventType.SUBAGENT_STARTED: data = SubagentStartedData.from_dict(data_obj)
case SessionEventType.SUBAGENT_CONFIGURED: data = SubagentConfiguredData.from_dict(data_obj)
@@ -13710,7 +13885,10 @@ def session_event_to_dict(x: SessionEvent) -> Any:
"ShutdownModelMetricUsage",
"ShutdownTokenDetail",
"ShutdownType",
+ "SkillContextDeliveredData",
+ "SkillContextDeliveredRefData",
"SkillInvokedData",
+ "SkillInvokedRefData",
"SkillInvokedTrigger",
"SkillSource",
"SkillsLoadedSkill",
diff --git a/python/e2e/test_mcp_oauth_e2e.py b/python/e2e/test_mcp_oauth_e2e.py
index 20832fabcd..202c842faa 100644
--- a/python/e2e/test_mcp_oauth_e2e.py
+++ b/python/e2e/test_mcp_oauth_e2e.py
@@ -294,7 +294,7 @@ def on_mcp_auth_request(request, _invocation):
if request["reason"] == "upscope":
assert request["wwwAuthenticateParams"] == {
"resourceMetadataUrl": f"{url}/.well-known/oauth-protected-resource",
- "scope": "mcp.write",
+ "scope": "mcp.read mcp.write",
"error": "insufficient_scope",
}
return {"kind": "token", "accessToken": UPSCOPE_TOKEN}
diff --git a/rust/src/generated/api_types.rs b/rust/src/generated/api_types.rs
index 9d77180ebf..866d2034df 100644
--- a/rust/src/generated/api_types.rs
+++ b/rust/src/generated/api_types.rs
@@ -199,9 +199,6 @@ pub mod rpc_methods {
pub const SESSIONS_STOPREMOTECONTROL: &str = "sessions.stopRemoteControl";
/// `sessions.getRemoteControlStatus`
pub const SESSIONS_GETREMOTECONTROLSTATUS: &str = "sessions.getRemoteControlStatus";
- /// `sessions.registerExtensionToolsOnSession`
- pub const SESSIONS_REGISTEREXTENSIONTOOLSONSESSION: &str =
- "sessions.registerExtensionToolsOnSession";
/// `sessions.configureSessionExtensions`
pub const SESSIONS_CONFIGURESESSIONEXTENSIONS: &str = "sessions.configureSessionExtensions";
/// `agentRegistry.spawn`
@@ -2035,7 +2032,7 @@ pub struct AttachmentDirectory {
pub display_name: String,
/// Absolute directory path
pub path: String,
- /// Frozen rendered line this attachment contributed to the prompt block (e.g. "* /path (12 items)"). Captured at send time so resumed history reproduces the exact text the model saw, independent of later filesystem changes.
+ /// Frozen rendered line this attachment contributed to the `` prompt block (e.g. "* /path (12 items)"). Captured at send time so resumed history reproduces the exact text the model saw, independent of later filesystem changes.
#[serde(skip_serializing_if = "Option::is_none")]
pub tagged_files_entry: Option,
/// Attachment type discriminator
@@ -2119,7 +2116,7 @@ pub struct AttachmentFile {
pub omitted_reason: Option,
/// Absolute file path
pub path: String,
- /// Frozen rendered line this attachment contributed to the prompt block (e.g. "* /path (123 lines)"). Captured at send time so resumed history reproduces the exact text the model saw, independent of later filesystem changes. Present only for attachments routed to (mutually exclusive with assetId, which marks bytes sent natively).
+ /// Frozen rendered line this attachment contributed to the `` prompt block (e.g. "* /path (123 lines)"). Captured at send time so resumed history reproduces the exact text the model saw, independent of later filesystem changes. Present only for attachments routed to `` (mutually exclusive with assetId, which marks bytes sent natively).
#[serde(skip_serializing_if = "Option::is_none")]
pub tagged_files_entry: Option,
/// Attachment type discriminator
@@ -4465,7 +4462,7 @@ pub struct CurrentToolMetadata {
pub namespaced_name: Option,
}
-/// A file included in the redacted debug bundle.
+/// A file included in the session debug bundle.
///
///
///
@@ -4501,7 +4498,7 @@ pub struct DebugCollectLogsDestinationArchive {
pub struct DebugCollectLogsDestinationDirectory {
/// Destination variant discriminator.
pub kind: DebugCollectLogsDestinationDirectoryKind,
- /// Directory where redacted files should be staged. The directory is created if needed.
+ /// Directory where files should be staged. The directory is created if needed.
pub output_directory: String,
}
@@ -4522,7 +4519,7 @@ pub struct DebugCollectLogsEntry {
pub kind: DebugCollectLogsEntryKind,
/// Server-local source path to read.
pub path: String,
- /// How text content from this entry should be redacted. Defaults to plain-text.
+ /// How text content from this entry should be redacted. Defaults to plain-text. With none, no redaction is applied; the caller must ensure any necessary redaction is performed before this call.
#[serde(skip_serializing_if = "Option::is_none")]
pub redaction: Option
,
/// When true, collection fails if this entry cannot be read. Defaults to false, which records the entry in `skippedEntries`.
@@ -4564,7 +4561,7 @@ pub struct DebugCollectLogsInclude {
pub shell_logs: Option,
}
-/// Options for collecting a redacted session debug bundle.
+/// Options for collecting a session debug bundle with configurable redaction.
///
///
///
@@ -4578,7 +4575,7 @@ pub struct DebugCollectLogsRequest {
/// Caller-provided server-local files or directories to include in addition to the runtime's built-in session diagnostics. This lets host applications add their own diagnostics without changing the API shape.
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_entries: Option
>,
- /// Where the redacted bundle should be written. Use `archive` to produce a .tgz, or `directory` to stage redacted files for caller-managed upload/post-processing.
+ /// Where the bundle should be written. Use `archive` to produce a .tgz, or `directory` to stage files for caller-managed upload/post-processing.
pub destination: DebugCollectLogsDestination,
/// Which built-in session diagnostics to include. Omitted fields default to true.
#[serde(skip_serializing_if = "Option::is_none")]
@@ -4605,7 +4602,7 @@ pub struct DebugCollectLogsSkippedEntry {
pub reason: String,
}
-/// Result of collecting a redacted debug bundle.
+/// Result of collecting a session debug bundle.
///
///
///
@@ -4616,7 +4613,7 @@ pub struct DebugCollectLogsSkippedEntry {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DebugCollectLogsResult {
- /// Files included in the redacted bundle.
+ /// Files included in the bundle.
pub entries: Vec
,
/// Destination kind that was written.
pub kind: DebugCollectLogsResultKind,
@@ -5012,7 +5009,7 @@ pub struct Extension {
/// Process ID if the extension is running
#[serde(skip_serializing_if = "Option::is_none")]
pub pid: Option,
- /// Discovery source: project (.github/extensions/), user (~/.copilot/extensions/), plugin (installed plugin), or session (session-state//extensions/)
+ /// Discovery source: project (.github/extensions/), user (~/.copilot/extensions/), plugin (installed plugin), or session (session-state/``/extensions/)
pub source: ExtensionSource,
/// Current status: running, disabled, failed, or starting
pub status: ExtensionStatus,
@@ -7072,6 +7069,9 @@ pub struct InstalledPluginInfo {
pub marketplace: String,
/// Plugin name
pub name: String,
+ /// Runtime-reported plugin provenance. Currently set to "builtin" only for plugins registered through the trusted host built-in boundary; absent for installed, marketplace, direct, and live plugins.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub source: Option,
/// Installed version (when reported by the plugin manifest)
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option,
@@ -7306,6 +7306,29 @@ pub struct InterruptMainTurnResult {
pub interrupted: bool,
}
+/// A JSON Schema output contract. OpenAI receives the name, description, schema and strict setting; Anthropic receives the schema in output_config.format and always uses its native strict enforcement.
+///
+///
+///
+/// **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 JsonSchemaResponseFormat {
+ /// Optional description passed to OpenAI providers.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub description: Option,
+ /// Name of the output schema, subject to the provider's naming restrictions.
+ pub name: String,
+ /// JSON Schema passed unchanged to the inference provider. Schemas larger than 32 MiB when JSON-encoded are rejected before admission, using the runtime's existing request-size ceiling. This is not a guarantee that the entire model request fits. Supported keywords and schema restrictions are determined by the provider.
+ pub schema: serde_json::Value,
+ /// Optional strict enforcement setting for OpenAI providers. Omitted uses the provider default. Anthropic always enforces its supported schema subset.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub strict: Option,
+}
+
/// A request body chunk or cancellation signal.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
@@ -7617,6 +7640,32 @@ pub struct LspInitializeRequest {
pub working_directory: Option,
}
+/// Non-secret host-managed HTTP MCP server configuration. The containing map key is the stable managed identity; credentials are supplied dynamically by the host.
+///
+///
+///
+/// **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 ManagedMcpServerConfig {
+ /// Human-readable catalog display name.
+ pub display_name: String,
+ /// Maximum dynamic-header cache lifetime in milliseconds.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub headers_refresh_ttl_ms: Option,
+ /// Timeout in milliseconds for tool discovery and tool calls.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub timeout: Option,
+ /// Tools to include. Defaults to all tools when omitted.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub tools: Option>,
+ /// Hosted MCP streamable HTTP endpoint.
+ pub url: String,
+}
+
/// Validated device-managed settings discovered before a session exists.
///
///
@@ -8378,6 +8427,9 @@ pub struct McpHeadersHandlePendingHeadersRefreshRequestHeaders {
pub headers: HashMap
,
/// Headers-refresh response variant discriminator.
pub kind: McpHeadersHandlePendingHeadersRefreshRequestHeadersKind,
+ /// Optional lifetime in milliseconds for these returned headers. The runtime clamps its configured cache lifetime to this value.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub ttl_ms: Option,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
@@ -8387,6 +8439,15 @@ pub struct McpHeadersHandlePendingHeadersRefreshRequestNone {
pub kind: McpHeadersHandlePendingHeadersRefreshRequestNoneKind,
}
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct McpHeadersHandlePendingHeadersRefreshRequestError {
+ /// Headers-refresh response variant discriminator.
+ pub kind: McpHeadersHandlePendingHeadersRefreshRequestErrorKind,
+ /// Host credential broker failure, denial, or revocation reason.
+ pub message: String,
+}
+
/// MCP headers refresh request id and the host response.
///
///
@@ -9610,6 +9671,9 @@ pub struct McpSamplingExecutionResult {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct McpServer {
+ /// Human-readable display name supplied by a managed server catalog.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub display_name: Option
,
/// Error message if the server failed to connect
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option,
@@ -9618,7 +9682,7 @@ pub struct McpServer {
/// Server-advertised metadata for a connected server. Omitted when no live connection metadata is available, including while pending or when failed, disabled, stopped, or not configured.
#[serde(skip_serializing_if = "Option::is_none")]
pub server_metadata: Option,
- /// Configuration source: user, workspace, plugin, or builtin
+ /// Configuration source: user, workspace, plugin, builtin, or managed
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option,
/// Plugin name that provided this server, when source is plugin.
@@ -13662,6 +13726,97 @@ pub struct ProtocolExternalToolDefinition {
pub title: Option,
}
+///
+///
+///
+/// **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 ProtocolStaticSectionOverride {
+ /// Declarative operation applied to the section.
+ pub action: ProtocolStaticSectionAction,
+ /// Optional content used by replace, append, and prepend operations.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub content: Option,
+}
+
+///
+///
+///
+/// **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 ProtocolSystemMessageAppendConfig {
+ /// Text appended to the standard system prompt.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub content: Option,
+ /// Append-mode discriminator. Omission also selects append mode.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub mode: Option,
+}
+
+///
+///
+///
+/// **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 ProtocolSystemMessageCustomizeConfig {
+ /// Text appended after the customized sections.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub content: Option,
+ /// Customize-mode discriminator.
+ pub mode: ProtocolCustomizeMode,
+ /// Named standard-prompt section overrides.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub sections: Option>,
+}
+
+///
+///
+///
+/// **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 SystemMessageBlock {
+ /// Text content for this system-message block.
+ pub content: String,
+ /// Whether the block is static and may be cached independently of dynamic prompt content.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub is_static: Option,
+}
+
+///
+///
+///
+/// **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 ProtocolSystemMessageReplaceConfig {
+ /// Complete replacement system-message text.
+ pub content: String,
+ /// Optional structured blocks corresponding to the replacement content.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub content_blocks: Option>,
+ /// Replace-mode discriminator.
+ pub mode: ProtocolReplaceMode,
+}
+
/// A BYOK model definition referencing a named provider.
///
///
@@ -13695,6 +13850,9 @@ pub struct ProviderModelConfig {
pub name: Option
,
/// Name of the configured provider that serves this model.
pub provider: String,
+ /// System-message configuration used when the runtime builds the standard prompt for this provider-qualified model, including general-purpose subagents. It uses the same object hierarchy as session-level systemMessage configuration, except transform actions are rejected because the current callback protocol is not model-scoped. When present, it overrides the session-wide configuration on those prompt paths. Selected custom-agent and specialized-subagent prompts remain authoritative.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub system_message: Option,
/// The model name sent to the provider API for inference. Defaults to `id`.
#[serde(skip_serializing_if = "Option::is_none")]
pub wire_model: Option,
@@ -14860,60 +15018,6 @@ pub struct RegisterEventInterestResult {
pub handle: String,
}
-/// Optional registration options.
-///
-///
-///
-/// **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 SessionsRegisterExtensionToolsOnSessionOptions {
- /// In-process `() => boolean` gating callback used only by the CLI.
- #[doc(hidden)]
- #[serde(skip_serializing_if = "Option::is_none")]
- pub(crate) enabled: Option,
-}
-
-/// Params to attach an extension loader's tools to a session.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
-#[derive(Debug, Clone, Default, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub(crate) struct RegisterExtensionToolsParams {
- /// In-process ExtensionLoader handle used only by the CLI and excluded from the public SDK surface.
- #[doc(hidden)]
- pub(crate) loader: serde_json::Value,
- /// Optional registration options.
- #[serde(skip_serializing_if = "Option::is_none")]
- pub options: Option,
- /// Session to register extension tools on.
- pub session_id: SessionId,
-}
-
-/// Handle for releasing the extension tool registration.
-///
-///
-///
-/// **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(crate) struct RegisterExtensionToolsResult {
- /// In-process unsubscribe function used only by the CLI.
- #[doc(hidden)]
- pub(crate) unsubscribe: serde_json::Value,
-}
-
/// Opaque handle previously returned by `registerInterest` to release.
///
///
@@ -15276,6 +15380,23 @@ pub struct RemoteSessionRepository {
pub owner: String,
}
+/// Provider-native structured output format. JSON Schema is forwarded without rewriting or validating the schema or the generated output.
+///
+///
+///
+/// **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 ResponseFormat {
+ /// JSON Schema and provider options for the turn's output.
+ pub json_schema: JsonSchemaResponseFormat,
+ /// Output format discriminator. Currently only json_schema is supported.
+ pub r#type: ResponseFormatType,
+}
+
/// Credential-injection capability flags applied while the sandbox is enabled. For the same capability independent of sandboxing, and matched to the credential's GitHub host, see `shell.credentials`; the two are additive.
///
///
@@ -15384,13 +15505,19 @@ pub struct SandboxConfigUserPolicyNetworkProxy {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SandboxConfigUserPolicyNetwork {
+ /// Hosts allowed through the built-in sandbox proxy. A non-empty list denies unmatched hosts; an absent or empty list allows all hosts not blocked. Supports exact hostnames, IP addresses, and *.example.com for strict subdomains. Host rules do not override the outbound or local-network toggles.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub allowed_hosts: Option
>,
/// Whether traffic to local/loopback addresses is allowed.
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_local_network: Option,
/// Whether outbound network traffic is allowed at all.
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_outbound: Option,
- /// HTTP proxy for sandboxed process traffic. Linux restricts egress to the proxy endpoint, requires that endpoint to be reachable over IPv4 (the `[::]` dual-stack wildcard is accepted and routed through the IPv4 gateway), and does not support proxy credentials. macOS relies on applications honoring proxy environment variables. Windows also configures a per-AppContainer WinHTTP proxy, but enforcement depends on the application's networking stack. Configure supported credentials in the separate `username` and `password` fields. A credential-free http:// loopback URL uses the localhost proxy form, while an https:// or authenticated loopback URL uses the URL form.
+ /// Hosts denied by the built-in sandbox proxy. Deny rules take precedence over allowedHosts. A domain also denies all its subdomains. IP addresses match exactly; *.example.com matches strict subdomains, and * denies every host.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub blocked_hosts: Option>,
+ /// HTTP(S) proxy for sandboxed traffic. With host rules, this is the built-in local proxy's upstream; credentials stay in the runtime, and Linux and macOS restrict the child to the local listener. Without host rules, Linux restricts egress to this endpoint but rejects credentials, and macOS proxying is cooperative. Windows enforcement depends on the application's networking stack. Configure credentials in the separate username/password fields. The transient local listener URL is never persisted.
#[serde(skip_serializing_if = "Option::is_none")]
pub proxy: Option,
}
@@ -15841,6 +15968,15 @@ pub struct SendMessageItem {
pub(crate) source: Option,
}
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SendMessagesRequestResponseFormat {
+ /// JSON Schema and provider options for the turn's output.
+ pub json_schema: JsonSchemaResponseFormat,
+ /// Output format discriminator. Currently only json_schema is supported.
+ pub r#type: SendMessagesRequestResponseFormatType,
+}
+
/// Parameters for sending zero or more user messages to the session in a single turn. Remote-backed (Mission Control) sessions do not support this method and will return an error.
///
///
@@ -15855,7 +15991,7 @@ pub struct SendMessagesRequest {
/// The UI mode the agent was in when these messages were sent. Defaults to the session's current mode.
#[serde(skip_serializing_if = "Option::is_none")]
pub agent_mode: Option
,
- /// The user messages to append to the conversation, in order. May be empty, in which case a single turn runs over the existing history with no new user message.
+ /// The user messages to append to the conversation, in order, before running one agent loop. When the batch starts a run, its final message is the primary initiating message; earlier messages provide context, not separate runs or replies. May be empty, in which case a single turn runs over the existing history with no new user message or originatingMessageId.
pub messages: Vec,
/// How to deliver the messages. `enqueue` (default) appends to the message queue. `immediate` interjects during an in-progress turn.
#[serde(skip_serializing_if = "Option::is_none")]
@@ -15866,6 +16002,9 @@ pub struct SendMessagesRequest {
/// Custom HTTP headers to include in outbound model requests for this turn. Merged with session-level provider headers; per-turn headers augment and overwrite session-level headers with the same key.
#[serde(skip_serializing_if = "Option::is_none")]
pub request_headers: Option>,
+ /// Provider-native output format for the whole turn, including an empty message batch and all tool-call iterations. Not inherited by later turns or subagents. Ordinary steering inherits the active format; specifying responseFormat with mode: immediate is an error, even while idle. Returned assistant content remains text; the runtime does not parse or validate it. Unsupported models or schemas produce provider errors.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub response_format: Option,
/// W3C Trace Context traceparent header for distributed tracing of this agent turn
#[serde(skip_serializing_if = "Option::is_none")]
pub traceparent: Option,
@@ -15888,10 +16027,19 @@ pub struct SendMessagesRequest {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SendMessagesResult {
- /// Unique identifiers assigned to the messages, one per provided message in order. Empty when no messages were provided.
+ /// Unique identifiers assigned to the messages, one per provided message in order. For a batch that starts a run, assistant messages use the final ID as originatingMessageId throughout that run, including tool iterations and stop-hook corrections. Immediate steering does not replace the active run's origin. Empty when no messages were provided; that run has no originatingMessageId.
pub message_ids: Vec,
}
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SendRequestResponseFormat {
+ /// JSON Schema and provider options for the turn's output.
+ pub json_schema: JsonSchemaResponseFormat,
+ /// Output format discriminator. Currently only json_schema is supported.
+ pub r#type: SendRequestResponseFormatType,
+}
+
/// Parameters for sending a user message to the session
///
///
@@ -15929,6 +16077,9 @@ pub struct SendRequest {
/// If set, the request will fail if the named tool is not available when this message is among the user messages at the start of the current exchange
#[serde(skip_serializing_if = "Option::is_none")]
pub required_tool: Option
,
+ /// Provider-native output format for this turn, including all tool-call iterations. Not inherited by later turns or subagents. Ordinary steering inherits the active format; specifying responseFormat with mode: immediate is an error, even while idle. Returned assistant content remains text; the runtime does not parse or validate it. Unsupported models or schemas produce provider errors.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub response_format: Option,
/// Optional provenance tag copied to the resulting user.message event. Must be `user`, `system`, `command-` for command-originated messages, `schedule-` for scheduled prompts, or `agent-` for prompts sent by another agent.
#[doc(hidden)]
#[serde(skip_serializing_if = "Option::is_none")]
@@ -17530,7 +17681,7 @@ pub struct SessionOpenOptions {
/// Opt in to capturing file changes for session rewind and session diff. Capture cannot reconstruct changes made before it was enabled. On create it starts capture from the first turn. It is also honored on resume: for a session that already has tracked prior turns, tracking continues automatically even if this is omitted; passing it on resume additionally enables tracking for an eligible session that has no prior root turn yet. Resuming a session whose prior root turns were never tracked has no restorable baseline, so tracking stays disabled for it and rewind reports file change tracking as unavailable; the resume itself still succeeds, so sessions that predate tracking remain loadable. The opt-in is only rejected when the session can never track (a subagent session, or one without local session storage). It is intentionally absent from the mutable options update because enabling it after edits have occurred would create an incomplete, misleading baseline. Subagents share the parent session's capture store and are not tracked as separate rewind points: a file a subagent writes is attributed to whichever root user turn was open when the capture was staged, just before the tool body ran. A turn cannot open while a staged capture is still in flight, so a subagent tool that staged under the spawning turn stays attributed to it however late the write lands, while a capture it stages after the user's next message belongs to that later turn. Attribution decides which turn's rewind point counts and file preview include that write; it does not narrow which rewinds revert it, because a rewind restores every capture from the selected turn onward, so the earlier spawning turn reverts it as well.
#[serde(skip_serializing_if = "Option::is_none")]
pub enable_file_change_tracking: Option,
- /// Opt-in: self-fetch and enforce enterprise managed settings at session bootstrap.
+ /// Opt-in: self-fetch and enforce enterprise managed settings, including managed hook policies, at session bootstrap.
#[serde(skip_serializing_if = "Option::is_none")]
pub enable_managed_settings: Option,
/// Whether on-demand custom instruction discovery is enabled.
@@ -17599,6 +17750,16 @@ pub struct SessionOpenOptions {
/// Identifier sent to LSP-style integrations.
#[serde(skip_serializing_if = "Option::is_none")]
pub lsp_client_name: Option,
+ /// Non-secret host-managed HTTP MCP servers keyed by stable managed identity. Managed provenance is runtime-established from this separate field and credentials are supplied through dynamic-header refresh.
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub managed_mcp_servers: Option>,
/// Permissions-only enterprise policy injected by the SDK host at session create or resume. Composes restrictively with self-fetched and device policy and is not persisted.
#[serde(skip_serializing_if = "Option::is_none")]
pub managed_settings: Option,
@@ -19744,6 +19905,9 @@ pub struct SlashCommandTextResult {
/// True when the invocation mutated user runtime settings; consumers caching settings should refresh
#[serde(skip_serializing_if = "Option::is_none")]
pub runtime_settings_changed: Option,
+ /// Present when the invocation changed the sandbox for this session only. Nothing was persisted, so consumers must mirror the change onto the live session rather than reloading settings, and must not treat it as a settings change.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub sandbox_session_change: Option,
/// Text output for the client to render
pub text: String,
}
@@ -23161,22 +23325,6 @@ pub struct SessionsGetRemoteControlStatusResult {
pub status: serde_json::Value,
}
-/// Handle for releasing the extension tool registration.
-///
-///
-///
-/// **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(crate) struct SessionsRegisterExtensionToolsOnSessionResult {
- /// In-process unsubscribe function used only by the CLI.
- #[doc(hidden)]
- pub(crate) unsubscribe: serde_json::Value,
-}
-
/// Identifies the target session.
///
///
@@ -23218,7 +23366,7 @@ pub struct SessionSendResult {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionSendMessagesResult {
- /// Unique identifiers assigned to the messages, one per provided message in order. Empty when no messages were provided.
+ /// Unique identifiers assigned to the messages, one per provided message in order. For a batch that starts a run, assistant messages use the final ID as originatingMessageId throughout that run, including tool iterations and stop-hook corrections. Immediate steering does not replace the active run's origin. Empty when no messages were provided; that run has no originatingMessageId.
pub message_ids: Vec
,
}
@@ -23460,7 +23608,7 @@ pub struct SessionGitHubAuthLastAuthErrorsParams {
pub session_id: SessionId,
}
-/// Result of collecting a redacted debug bundle.
+/// Result of collecting a session debug bundle.
///
///
///
@@ -23471,7 +23619,7 @@ pub struct SessionGitHubAuthLastAuthErrorsParams {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionDebugCollectLogsResult {
- /// Files included in the redacted bundle.
+ /// Files included in the bundle.
pub entries: Vec
,
/// Destination kind that was written.
pub kind: DebugCollectLogsResultKind,
@@ -30594,7 +30742,7 @@ pub enum DebugCollectLogsDestinationDirectoryKind {
Directory,
}
-/// Destination for the redacted debug bundle.
+/// Destination for the session debug bundle.
///
///
///
@@ -30647,6 +30795,9 @@ pub enum DebugCollectLogsRedaction {
/// Redact each non-empty line as a session event JSON object, falling back to plain-text redaction for malformed lines.
#[serde(rename = "events-jsonl")]
EventsJsonl,
+ /// No redaction is applied. The caller must ensure any necessary redaction is performed before this call.
+ #[serde(rename = "none")]
+ None,
/// Unknown variant for forward compatibility.
#[default]
#[serde(other)]
@@ -30666,7 +30817,7 @@ pub enum DebugCollectLogsResultKind {
/// A .tgz archive was written.
#[serde(rename = "archive")]
Archive,
- /// A directory containing redacted files was written.
+ /// A directory containing the collected files was written.
#[serde(rename = "directory")]
Directory,
/// Unknown variant for forward compatibility.
@@ -31885,6 +32036,14 @@ pub enum McpHeadersHandlePendingHeadersRefreshRequestNoneKind {
None,
}
+/// Headers-refresh response variant discriminator.
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum McpHeadersHandlePendingHeadersRefreshRequestErrorKind {
+ #[serde(rename = "error")]
+ #[default]
+ Error,
+}
+
/// Host response: supply dynamic headers or decline this refresh.
///
///
@@ -31898,6 +32057,7 @@ pub enum McpHeadersHandlePendingHeadersRefreshRequestNoneKind {
pub enum McpHeadersHandlePendingHeadersRefreshRequest {
Headers(McpHeadersHandlePendingHeadersRefreshRequestHeaders),
None(McpHeadersHandlePendingHeadersRefreshRequestNone),
+ Error(McpHeadersHandlePendingHeadersRefreshRequestError),
}
/// Whether a planned configuration change would create or modify an entry
@@ -33691,6 +33851,40 @@ pub enum PluginInstallStagingMode {
Unknown,
}
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum ProtocolAppendMode {
+ #[serde(rename = "append")]
+ Append,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum ProtocolCustomizeMode {
+ #[serde(rename = "customize")]
+ Customize,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
/// Controls whether the runtime may defer loading an external tool definition.
///
///
@@ -33713,6 +33907,50 @@ pub enum ProtocolExternalToolDefer {
Unknown,
}
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum ProtocolReplaceMode {
+ #[serde(rename = "replace")]
+ Replace,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum ProtocolStaticSectionAction {
+ /// Replace the section content.
+ #[serde(rename = "replace")]
+ Replace,
+ /// Remove the section content.
+ #[serde(rename = "remove")]
+ Remove,
+ /// Append content to the section.
+ #[serde(rename = "append")]
+ Append,
+ /// Prepend content to the section.
+ #[serde(rename = "prepend")]
+ Prepend,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
/// Transport to be used for provider requests.
///
///
@@ -34090,6 +34328,14 @@ pub enum RemoteSessionMetadataTaskType {
Unknown,
}
+/// Output format discriminator. Currently only json_schema is supported.
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum ResponseFormatType {
+ #[serde(rename = "json_schema")]
+ #[default]
+ JsonSchema,
+}
+
/// Origin of the sandbox choice supplied by an internal client.
///
///
@@ -34127,6 +34373,44 @@ pub enum SandboxConfigSource {
Unknown,
}
+/// A session-scoped sandbox transition applied while handling a slash command
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum SandboxSessionChange {
+ /// The sandbox is off for the rest of this session; nothing was persisted and a new session starts from managed policy.
+ #[serde(rename = "disabled")]
+ Disabled,
+ /// A previous session-scoped opt-out was cleared and the sandbox is enforced again.
+ #[serde(rename = "restored")]
+ Restored,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
+/// Output format discriminator. Currently only json_schema is supported.
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum SendMessagesRequestResponseFormatType {
+ #[serde(rename = "json_schema")]
+ #[default]
+ JsonSchema,
+}
+
+/// Output format discriminator. Currently only json_schema is supported.
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum SendRequestResponseFormatType {
+ #[serde(rename = "json_schema")]
+ #[default]
+ JsonSchema,
+}
+
/// Session capability enabled for this session
///
///
diff --git a/rust/src/generated/rpc.rs b/rust/src/generated/rpc.rs
index fd54f8dcb8..d07ccf0b4f 100644
--- a/rust/src/generated/rpc.rs
+++ b/rust/src/generated/rpc.rs
@@ -2776,41 +2776,7 @@ impl<'a> ClientRpcSessions<'a> {
Ok(serde_json::from_value(_value)?)
}
- /// Registers extension-provided tools on the given session, gated by an optional `enabled` callback. Returns an opaque unsubscribe function the caller must invoke to deregister the tools when the extension is torn down. Marked internal because `loader`, `enabled`, and the returned `unsubscribe` are in-process handles that cannot cross the JSON-RPC boundary. Disappears once extension discovery / launch / tool registration are owned by the runtime: SDK consumers will pass pure config (search paths, disabled ids) via `SessionOptions` and the runtime will resolve, launch, register, and tear down extensions itself.
- ///
- /// Wire method: `sessions.registerExtensionToolsOnSession`.
- ///
- /// # Parameters
- ///
- /// * `params` - Params to attach an extension loader's tools to a session.
- ///
- /// # Returns
- ///
- /// Handle for releasing the extension tool registration.
- ///
- ///
- ///
- /// **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(crate) async fn register_extension_tools_on_session(
- &self,
- params: RegisterExtensionToolsParams,
- ) -> Result
{
- let wire_params = serde_json::to_value(params)?;
- let _value = self
- .client
- .call(
- rpc_methods::SESSIONS_REGISTEREXTENSIONTOOLSONSESSION,
- Some(wire_params),
- )
- .await?;
- Ok(serde_json::from_value(_value)?)
- }
-
- /// Attaches (or detaches) an in-process ExtensionController delegate for the given session, used by shared-API surfaces that need to query or modify the session's extension state. Pass `controller: undefined` to detach. Marked internal because the controller is an in-process object that cannot cross the JSON-RPC boundary. Disappears alongside `registerExtensionToolsOnSession`: once the runtime owns extension management, the public surface exposes list/enable/disable/reload as dedicated RPCs served by the runtime.
+ /// Attaches (or detaches) an in-process ExtensionController delegate for the given session in a local host adapter. Pass `controller: undefined` to detach. Internal because the controller cannot cross the JSON-RPC boundary; the runtime manages its own session extension service.
///
/// Wire method: `sessions.configureSessionExtensions`.
///
@@ -4532,17 +4498,17 @@ pub struct SessionRpcDebug<'a> {
}
impl<'a> SessionRpcDebug<'a> {
- /// Collects a redacted session debug log bundle into a local archive or staging directory. The runtime includes session-owned logs by default and accepts caller-provided diagnostic entries so host applications can add their own files without changing this API shape.
+ /// Collects a session debug log bundle into a local archive or staging directory. Logs are redacted by default; redaction can be configured per caller-provided diagnostic entry. The runtime includes session-owned logs by default and accepts caller-provided diagnostic entries so host applications can add their own files without changing this API shape.
///
/// Wire method: `session.debug.collectLogs`.
///
/// # Parameters
///
- /// * `params` - Options for collecting a redacted session debug bundle.
+ /// * `params` - Options for collecting a session debug bundle with configurable redaction.
///
/// # Returns
///
- /// Result of collecting a redacted debug bundle.
+ /// Result of collecting a session debug bundle.
///
///
///
diff --git a/rust/src/generated/session_events.rs b/rust/src/generated/session_events.rs
index 05e3590043..bacecbe528 100644
--- a/rust/src/generated/session_events.rs
+++ b/rust/src/generated/session_events.rs
@@ -230,6 +230,33 @@ pub enum SessionEventType {
ToolSearchActivated,
#[serde(rename = "skill.invoked")]
SkillInvoked,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "skill.invoked_ref")]
+ SkillInvokedRef,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "skill.context_delivered")]
+ SkillContextDelivered,
+ ///
+ ///
+ ///
+ /// **Experimental.** This type is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases.
+ ///
+ ///
+ #[serde(rename = "skill.context_delivered_ref")]
+ SkillContextDeliveredRef,
#[serde(rename = "sandbox.decision")]
SandboxDecision,
#[serde(rename = "subagent.started")]
@@ -727,6 +754,12 @@ pub enum SessionEventData {
ToolSearchActivated(ToolSearchActivatedData),
#[serde(rename = "skill.invoked")]
SkillInvoked(SkillInvokedData),
+ #[serde(rename = "skill.invoked_ref")]
+ SkillInvokedRef(SkillInvokedRefData),
+ #[serde(rename = "skill.context_delivered")]
+ SkillContextDelivered(SkillContextDeliveredData),
+ #[serde(rename = "skill.context_delivered_ref")]
+ SkillContextDeliveredRef(SkillContextDeliveredRefData),
#[serde(rename = "sandbox.decision")]
SandboxDecision(SandboxDecisionData),
#[serde(rename = "subagent.started")]
@@ -2952,6 +2985,9 @@ pub struct AssistantMessageData {
/// Model that produced this assistant message, if known
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option
,
+ /// Logical ID of the primary user message that initiated this run, matching the messageId returned by session.send (or the last messageId of session.sendMessages). Stable across model/tool iterations, steering messages, and stop-hook corrections. Subagent runs use their own initiating message ID, not the parent's. Absent for runs without an associated initiating message, such as empty batches.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub originating_message_id: Option,
/// Actual output token count from the API response (completion_tokens), used for accurate token accounting
#[serde(skip_serializing_if = "Option::is_none")]
pub output_tokens: Option,
@@ -3604,6 +3640,12 @@ pub struct ToolExecutionStartData {
///
#[serde(skip_serializing_if = "Option::is_none")]
pub fusion: Option,
+ /// Preferred lookup name for the MCP server hosting this tool: the configured (namespaced) config-map key when the tool carries one, otherwise the display name from `mcpServerName`. Present when the tool is an MCP tool; this is the name unrestricted provenance telemetry hashes so it joins with `mcp_server_setup`, which keys off the configured name too.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub mcp_config_server_name: Option,
+ /// Where the MCP server's configuration came from (`user`, `workspace`, `plugin`, or `builtin`), when the tool is an MCP tool and the server is configured
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub mcp_config_source: Option,
/// Name of the MCP server hosting this tool, when the tool is an MCP tool
#[serde(skip_serializing_if = "Option::is_none")]
pub mcp_server_name: Option,
@@ -4058,7 +4100,7 @@ pub struct ToolExecutionCompleteResult {
/// Structured content blocks (text, images, audio, resources) returned by the tool in their native format
#[serde(skip_serializing_if = "Option::is_none")]
pub contents: Option>,
- /// Full detailed tool result for UI/timeline display, preserving complete content such as diffs. Falls back to content when absent.
+ /// Detailed tool result for UI/timeline display, preserving complete content such as diffs for most tools. Successful skill invocations intentionally use the concise model-facing content here; the authoritative skill body is carried by the corresponding skill invocation event. Falls back to content when absent.
#[serde(skip_serializing_if = "Option::is_none")]
pub detailed_content: Option,
/// FIDES IFC label projected from tool ingress metadata (MCP `CallToolResult._meta` or synthesized built-in ingress labels) — persisted as `{ ifc: ... }` (only the `ifc` key, not the whole `_meta`). Persisted so the FIDES IFC label survives session resume: the engine rehydrates accumulated taint by replaying these on load. Populated for ingress sources when FIDES IFC is on. Experimental.
@@ -4225,6 +4267,76 @@ pub struct SkillInvokedData {
pub trigger: Option,
}
+/// Session event "skill.invoked_ref". Internal durable skill invocation receipt whose content resolves from an earlier inline skill event in the same session.
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SkillInvokedRefData {
+ /// Tool names that should be auto-approved when this skill is active
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub allowed_tools: Option>,
+ /// Content identifier of an earlier inline skill event in this session, in the prefixed form `sha256:` over the UTF-8 bytes of that event's `content`
+ pub content_id: String,
+ /// UTF-16 code unit length of the referenced skill content. Derived from the referenced body and validated against it when the reference is expanded; a reference whose length disagrees with the body it names is rejected instead of expanded
+ pub content_length: i64,
+ /// Description of the skill from its SKILL.md frontmatter
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub description: Option,
+ /// Whether model invocation is disabled for this skill
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub disable_model_invocation: Option,
+ /// Model identifier active when the skill was invoked, when known
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub model: Option,
+ /// Name of the invoked skill
+ pub name: String,
+ /// File path to the SKILL.md definition, or an empty string for an SDK-provided skill without a filesystem identity
+ pub path: String,
+ /// Name of the plugin this skill originated from, when applicable
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub plugin_name: Option,
+ /// Version of the plugin this skill originated from, when applicable
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub plugin_version: Option,
+ /// Source identifier for where the skill was discovered
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub source: Option,
+ /// What triggered the skill invocation
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub trigger: Option,
+}
+
+/// Session event "skill.context_delivered". Exact skill context delivered to the model during a tool phase. This is not a user submission or another skill invocation.
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SkillContextDeliveredData {
+ /// Exact model-facing skill wrapper, including its invocation-time file context
+ pub content: String,
+ /// Interaction that delivered this context, when known
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub interaction_id: Option,
+ /// Unmodified injection provenance, in the form skill-``
+ pub source: String,
+}
+
+/// Session event "skill.context_delivered_ref". Internal durable receipt that reconstructs exact model-visible skill context from earlier session content.
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SkillContextDeliveredRefData {
+ /// Content identifier of an earlier inline skill event in this session, in the prefixed form `sha256:` over the UTF-8 bytes of that event's `content`
+ pub content_id: String,
+ /// Interaction that delivered this context, when known
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub interaction_id: Option,
+ /// Exact text preceding the referenced content in the delivered wrapper
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub prefix: Option,
+ /// Unmodified injection provenance, in the form skill-``
+ pub source: String,
+ /// Exact text following the referenced content in the delivered wrapper
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub suffix: Option,
+}
+
/// Session event "sandbox.decision". Payload of `sandbox.decision`, a bounded governance record of what the process sandbox was configured to do and whether it took effect. Discriminated by `kind`.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
@@ -4252,6 +4364,9 @@ pub struct SubagentStartedData {
/// Model the sub-agent will run with, when known at start.
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option,
+ /// Authority or runtime mechanism responsible for sub-agent model selection, when known at start.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub model_selection_source: Option,
/// Task-registry ID of the spawning sub-agent. Absent when the root session spawned this child.
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_id: Option,
@@ -4401,7 +4516,7 @@ pub struct HookStartData {
pub hook_invocation_id: String,
/// Type of hook being invoked (e.g., "preToolUse", "postToolUse", "sessionStart")
pub hook_type: String,
- /// Input data passed to the hook. For postToolUse hooks the retained copy served by session.eventLog.read (and by a resumed session) elides the tool result's inline `contents`/`uiResource` and replaces an over-long `textResultForLlm` with a `[copilot:elided ...]` marker, to keep a multi-megabyte payload out of the durable event log; the live subscription stream still delivers the full value. Read the adjacent tool.execution_complete event for the tool result itself.
+ /// Input data passed to the hook. For postToolUse hooks the retained copy served by session.eventLog.read (and by a resumed session) drops the tool result's inline `contents`/`uiResource`/`skillInvocation` and replaces duplicated text result fields with a `[copilot:elided ...]` marker; the live subscription stream still delivers the full value. Canonical tool output remains in the adjacent tool.execution_complete event, while an invoked skill's authoritative body remains in its skill invocation event.
#[serde(skip_serializing_if = "Option::is_none")]
pub input: Option,
/// Tool call ID of the parent tool invocation when this event originates from a sub-agent
@@ -4434,7 +4549,7 @@ pub struct HookEndData {
pub hook_invocation_id: String,
/// Type of hook that was invoked (e.g., "preToolUse", "postToolUse", "sessionStart")
pub hook_type: String,
- /// Output data produced by the hook
+ /// Output data produced by the hook. Durable and resumed postToolUse receipts may omit messages owned by a successful skill invocation and replace an unchanged skill sessionLog copy with an elision marker; hook-modified or re-sourced values are preserved, and the authoritative body remains in the skill invocation event.
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option,
/// Tool call ID of the parent tool invocation when this event originates from a sub-agent
@@ -4512,7 +4627,7 @@ pub struct SystemMessageData {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SystemNotificationData {
- /// The notification text, typically wrapped in XML tags
+ /// The notification text, typically wrapped in `` XML tags
pub content: String,
/// Structured metadata identifying what triggered this notification
pub kind: serde_json::Value,
@@ -6655,6 +6770,9 @@ pub struct McpServerMetadata {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct McpServersLoadedServer {
+ /// Human-readable display name supplied by a managed server catalog.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub display_name: Option,
/// Error message if the server failed to connect
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option,
@@ -6669,7 +6787,7 @@ pub struct McpServersLoadedServer {
/// Server-advertised metadata for a connected server. Omitted when no live connection metadata is available, including while pending or when failed, disabled, stopped, or not configured.
#[serde(skip_serializing_if = "Option::is_none")]
pub server_metadata: Option,
- /// Configuration source: user, workspace, plugin, or builtin
+ /// Configuration source: user, workspace, plugin, builtin, or managed
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option,
/// Connection status: connected, failed, needs-auth, pending, disabled, stopped, or not_configured
@@ -7919,6 +8037,30 @@ pub enum AbortReason {
Unknown,
}
+/// Configuration source: user, workspace, plugin, builtin, or managed
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum McpServerSource {
+ /// Server configured in the user's global MCP configuration.
+ #[serde(rename = "user")]
+ User,
+ /// Server configured by the current workspace.
+ #[serde(rename = "workspace")]
+ Workspace,
+ /// Server contributed by an installed plugin.
+ #[serde(rename = "plugin")]
+ Plugin,
+ /// Server bundled with the runtime.
+ #[serde(rename = "builtin")]
+ Builtin,
+ /// Server supplied by a trusted host-managed catalog.
+ #[serde(rename = "managed")]
+ Managed,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
/// Transport mechanism: stdio, http, sse (deprecated), or memory (in-process MCP server)
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpServerTransport {
@@ -8156,27 +8298,6 @@ pub enum SkillInvokedTrigger {
Unknown,
}
-/// Where the model input for a task-tool sub-agent came from.
-#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
-pub enum SubagentTaskModelSource {
- /// The spawning agent supplied the task tool's model argument.
- #[serde(rename = "task_argument")]
- TaskArgument,
- /// The task omitted a model and the per-sub-agent settings entry supplied a concrete one.
- #[serde(rename = "subagent_configuration")]
- SubagentConfiguration,
- /// The task omitted a model and the user-defined custom agent's definition supplied one.
- #[serde(rename = "custom_agent_definition")]
- CustomAgentDefinition,
- /// Neither the task call, the per-sub-agent settings entry, nor a custom agent definition supplied a model.
- #[serde(rename = "unset")]
- Unset,
- /// Unknown variant for forward compatibility.
- #[default]
- #[serde(other)]
- Unknown,
-}
-
/// Authority or runtime mechanism responsible for sub-agent model selection.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SubagentModelSelectionSource {
@@ -8207,6 +8328,27 @@ pub enum SubagentModelSelectionSource {
Unknown,
}
+/// Where the model input for a task-tool sub-agent came from.
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum SubagentTaskModelSource {
+ /// The spawning agent supplied the task tool's model argument.
+ #[serde(rename = "task_argument")]
+ TaskArgument,
+ /// The task omitted a model and the per-sub-agent settings entry supplied a concrete one.
+ #[serde(rename = "subagent_configuration")]
+ SubagentConfiguration,
+ /// The task omitted a model and the user-defined custom agent's definition supplied one.
+ #[serde(rename = "custom_agent_definition")]
+ CustomAgentDefinition,
+ /// Neither the task call, the per-sub-agent settings entry, nor a custom agent definition supplied a model.
+ #[serde(rename = "unset")]
+ Unset,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
/// Binary asset type discriminator. Use "image" for images and "resource" otherwise.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum BinaryAssetType {
@@ -8973,6 +9115,9 @@ pub enum McpHeadersRefreshCompletedOutcome {
/// The host responded with no dynamic headers.
#[serde(rename = "none")]
None,
+ /// The host credential broker rejected or failed the refresh.
+ #[serde(rename = "error")]
+ Error,
/// No response arrived within the bounded window.
#[serde(rename = "timeout")]
Timeout,
@@ -9229,27 +9374,6 @@ pub enum AgentModelPolicy {
Unknown,
}
-/// Configuration source: user, workspace, plugin, or builtin
-#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
-pub enum McpServerSource {
- /// Server configured in the user's global MCP configuration.
- #[serde(rename = "user")]
- User,
- /// Server configured by the current workspace.
- #[serde(rename = "workspace")]
- Workspace,
- /// Server contributed by an installed plugin.
- #[serde(rename = "plugin")]
- Plugin,
- /// Server bundled with the runtime.
- #[serde(rename = "builtin")]
- Builtin,
- /// Unknown variant for forward compatibility.
- #[default]
- #[serde(other)]
- Unknown,
-}
-
/// Connection status: connected, failed, needs-auth, pending, disabled, stopped, or not_configured
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpServerStatus {
diff --git a/rust/tests/e2e/mcp_oauth.rs b/rust/tests/e2e/mcp_oauth.rs
index c5e4d7117a..ba98aec7c8 100644
--- a/rust/tests/e2e/mcp_oauth.rs
+++ b/rust/tests/e2e/mcp_oauth.rs
@@ -494,7 +494,10 @@ impl McpAuthHandler for LifecycleAuthHandler {
.as_deref()
.is_some_and(|url| url.ends_with("/.well-known/oauth-protected-resource"))
);
- assert_eq!(www_authenticate.scope.as_deref(), Some("mcp.write"));
+ assert_eq!(
+ www_authenticate.scope.as_deref(),
+ Some("mcp.read mcp.write")
+ );
assert_eq!(
www_authenticate.error.as_deref(),
Some("insufficient_scope")
diff --git a/rust/tests/e2e/rpc_session_state_extras.rs b/rust/tests/e2e/rpc_session_state_extras.rs
index 54079d31ae..f7eb1e5e95 100644
--- a/rust/tests/e2e/rpc_session_state_extras.rs
+++ b/rust/tests/e2e/rpc_session_state_extras.rs
@@ -309,6 +309,7 @@ async fn should_add_byok_provider_and_model_at_runtime() {
model_id: None,
name: Some("Rust Added Model".to_string()),
provider: "rust-e2e-provider".to_string(),
+ system_message: None,
wire_model: None,
}]),
})
diff --git a/rust/tests/e2e/rpc_tasks_and_handlers.rs b/rust/tests/e2e/rpc_tasks_and_handlers.rs
index 0b8e7d0642..3a66c6ab74 100644
--- a/rust/tests/e2e/rpc_tasks_and_handlers.rs
+++ b/rust/tests/e2e/rpc_tasks_and_handlers.rs
@@ -428,6 +428,7 @@ async fn should_return_expected_results_for_missing_pending_handler_requestids()
"missing".to_string(),
)]),
kind: McpHeadersHandlePendingHeadersRefreshRequestHeadersKind::Headers,
+ ttl_ms: None,
},
),
},
diff --git a/scripts/codegen/rust.ts b/scripts/codegen/rust.ts
index 03ac5adcec..714988cb05 100644
--- a/scripts/codegen/rust.ts
+++ b/scripts/codegen/rust.ts
@@ -473,7 +473,15 @@ function pushRustExperimentalDocs(
function pushRustDoc(lines: string[], text: string | undefined, indent = ""): void {
if (!text) return;
- const sanitized = text.replace(/\[::\]/g, "`[::]`");
+ const sanitized = text
+ .split("`")
+ .map((segment, index) =>
+ index % 2 === 0
+ ? segment.replace(/<[A-Za-z][A-Za-z0-9_-]*>/g, "`$&`")
+ : segment,
+ )
+ .join("`")
+ .replace(/\[::\]/g, "`[::]`");
for (const paragraph of sanitized.trim().split(/\r?\n/)) {
if (paragraph.trim().length === 0) {
lines.push(`${indent}///`);