diff --git a/dotnet/src/Generated/Rpc.cs b/dotnet/src/Generated/Rpc.cs
index 8471e9e4e1..7e3c233c4d 100644
--- a/dotnet/src/Generated/Rpc.cs
+++ b/dotnet/src/Generated/Rpc.cs
@@ -670,6 +670,10 @@ public sealed class CopilotUserResponseEndpoints
/// RPC data type for CopilotUserResponseOrganizationListItem operations.
public sealed class CopilotUserResponseOrganizationListItem
{
+ /// Numeric database ID of the organization.
+ [JsonPropertyName("id")]
+ public double? Id { get; set; }
+
/// GitHub login of the organization.
[JsonPropertyName("login")]
public string? Login { get; set; }
@@ -931,7 +935,7 @@ public sealed class CopilotUserResponse
[JsonPropertyName("monthly_quotas")]
public IDictionary? MonthlyQuotas { get; set; }
- /// Organizations the user belongs to, each with an optional login and display name.
+ /// Organizations the user belongs to, each with an optional ID, login, and display name.
[JsonPropertyName("organization_list")]
public IList? OrganizationList { get; set; }
@@ -1885,9 +1889,9 @@ public partial class McpPlanInstallResultNegotiationRefused : McpPlanInstallResu
[JsonPropertyName("runtimeProtocolVersion")]
public required long RuntimeProtocolVersion { get; set; }
- /// Every wire feature this runtime understands, so the caller can retry within that contract. This list does not imply that every deployment has enabled every operation.
+ /// Capabilities this runtime can safely advertise to this caller. The complete five-capability protocol-3 legacy set is always present; every capability added after that baseline appears only when the caller required it, so an older closed-enum decoder can still consume a refusal. This list does not imply that every deployment has enabled every operation.
[JsonPropertyName("supportedCapabilities")]
- public required IList SupportedCapabilities { get; set; }
+ public required IList SupportedCapabilities { get; set; }
/// The subset of the caller's bounded extensible capability identifiers this runtime cannot honour.
[JsonPropertyName("unsupportedCapabilities")]
@@ -2521,6 +2525,201 @@ public partial class CatalogCandidateSourceEmbedded : CatalogCandidateSource
public override string Kind => "embedded";
}
+/// A versioned, bounded trust observation carried unchanged with a catalog candidate and its private handle context. Current observations require a recognised T1/T2 tier; every non-current state structurally forbids a tier. Eligibility remains `unknown` while Agent Finder supplies no exposure decision, and states absent from its current wire are never inferred from age, relevance, popularity, or a tier transition.
+/// Polymorphic base type discriminated by status.
+[Experimental(Diagnostics.Experimental)]
+[JsonPolymorphic(
+ TypeDiscriminatorPropertyName = "status",
+ UnknownDerivedTypeHandling = JsonUnknownDerivedTypeHandling.FallBackToBaseType)]
+[JsonDerivedType(typeof(CatalogTrustSnapshotCurrent), "current")]
+[JsonDerivedType(typeof(CatalogTrustSnapshotAbsent), "absent")]
+[JsonDerivedType(typeof(CatalogTrustSnapshotStale), "stale")]
+[JsonDerivedType(typeof(CatalogTrustSnapshotDowngraded), "downgraded")]
+[JsonDerivedType(typeof(CatalogTrustSnapshotRevoked), "revoked")]
+[JsonDerivedType(typeof(CatalogTrustSnapshotUnsupported), "unsupported")]
+[JsonDerivedType(typeof(CatalogTrustSnapshotMalformed), "malformed")]
+public partial class CatalogTrustSnapshot
+{
+ /// The type discriminator.
+ [JsonPropertyName("status")]
+ public virtual string Status { get; set; } = string.Empty;
+}
+
+
+/// Where and when the runtime observed the trust metadata. Observation time is not the authority's evaluation time and must not be used to infer staleness.
+[Experimental(Diagnostics.Experimental)]
+public sealed class CatalogTrustProvenance
+{
+ /// ISO 8601 timestamp with a timezone offset at which the runtime observed the search result carrying this trust field.
+ [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Safe for generated string properties: JSON Schema minLength/maxLength map to string length validation, not reflection over trimmed Count members")]
+ [MinLength(20)]
+ [MaxLength(64)]
+ [JsonPropertyName("observedAt")]
+ public DateTimeOffset ObservedAt { get; set; }
+
+ /// Bounded authority that supplied the trust field.
+ [JsonPropertyName("source")]
+ public CatalogTrustSource Source { get; set; }
+}
+
+/// A recognised current Agent Finder T1 or T2 trust tier.
+/// The current variant of .
+[Experimental(Diagnostics.Experimental)]
+public partial class CatalogTrustSnapshotCurrent : CatalogTrustSnapshot
+{
+ ///
+ [JsonIgnore]
+ public override string Status => "current";
+
+ /// Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field.
+ [JsonPropertyName("eligibility")]
+ public required CatalogTrustEligibility Eligibility { get; set; }
+
+ /// Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust.
+ [JsonPropertyName("provenance")]
+ public required CatalogTrustProvenance Provenance { get; set; }
+
+ /// Schema version of this runtime-owned snapshot envelope.
+ [JsonPropertyName("schemaVersion")]
+ public required CatalogTrustSnapshotSchemaVersion SchemaVersion { get; set; }
+
+ /// Service-computed T1 or T2 trust tier.
+ [JsonPropertyName("tier")]
+ public required CatalogTrustTier Tier { get; set; }
+}
+
+/// Discriminator: the authority omitted trust metadata.
+/// The absent variant of .
+[Experimental(Diagnostics.Experimental)]
+public partial class CatalogTrustSnapshotAbsent : CatalogTrustSnapshot
+{
+ ///
+ [JsonIgnore]
+ public override string Status => "absent";
+
+ /// Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field.
+ [JsonPropertyName("eligibility")]
+ public required CatalogTrustEligibility Eligibility { get; set; }
+
+ /// Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust.
+ [JsonPropertyName("provenance")]
+ public required CatalogTrustProvenance Provenance { get; set; }
+
+ /// Schema version of this runtime-owned snapshot envelope.
+ [JsonPropertyName("schemaVersion")]
+ public required CatalogTrustSnapshotSchemaVersion SchemaVersion { get; set; }
+}
+
+/// Discriminator: the authority explicitly marked the assessment stale.
+/// The stale variant of .
+[Experimental(Diagnostics.Experimental)]
+public partial class CatalogTrustSnapshotStale : CatalogTrustSnapshot
+{
+ ///
+ [JsonIgnore]
+ public override string Status => "stale";
+
+ /// Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field.
+ [JsonPropertyName("eligibility")]
+ public required CatalogTrustEligibility Eligibility { get; set; }
+
+ /// Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust.
+ [JsonPropertyName("provenance")]
+ public required CatalogTrustProvenance Provenance { get; set; }
+
+ /// Schema version of this runtime-owned snapshot envelope.
+ [JsonPropertyName("schemaVersion")]
+ public required CatalogTrustSnapshotSchemaVersion SchemaVersion { get; set; }
+}
+
+/// Discriminator: the authority explicitly reported a downgraded assessment.
+/// The downgraded variant of .
+[Experimental(Diagnostics.Experimental)]
+public partial class CatalogTrustSnapshotDowngraded : CatalogTrustSnapshot
+{
+ ///
+ [JsonIgnore]
+ public override string Status => "downgraded";
+
+ /// Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field.
+ [JsonPropertyName("eligibility")]
+ public required CatalogTrustEligibility Eligibility { get; set; }
+
+ /// Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust.
+ [JsonPropertyName("provenance")]
+ public required CatalogTrustProvenance Provenance { get; set; }
+
+ /// Schema version of this runtime-owned snapshot envelope.
+ [JsonPropertyName("schemaVersion")]
+ public required CatalogTrustSnapshotSchemaVersion SchemaVersion { get; set; }
+}
+
+/// Discriminator: the authority explicitly revoked the assessment.
+/// The revoked variant of .
+[Experimental(Diagnostics.Experimental)]
+public partial class CatalogTrustSnapshotRevoked : CatalogTrustSnapshot
+{
+ ///
+ [JsonIgnore]
+ public override string Status => "revoked";
+
+ /// Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field.
+ [JsonPropertyName("eligibility")]
+ public required CatalogTrustEligibility Eligibility { get; set; }
+
+ /// Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust.
+ [JsonPropertyName("provenance")]
+ public required CatalogTrustProvenance Provenance { get; set; }
+
+ /// Schema version of this runtime-owned snapshot envelope.
+ [JsonPropertyName("schemaVersion")]
+ public required CatalogTrustSnapshotSchemaVersion SchemaVersion { get; set; }
+}
+
+/// Discriminator: the authority supplied a bounded trust value this runtime does not understand.
+/// The unsupported variant of .
+[Experimental(Diagnostics.Experimental)]
+public partial class CatalogTrustSnapshotUnsupported : CatalogTrustSnapshot
+{
+ ///
+ [JsonIgnore]
+ public override string Status => "unsupported";
+
+ /// Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field.
+ [JsonPropertyName("eligibility")]
+ public required CatalogTrustEligibility Eligibility { get; set; }
+
+ /// Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust.
+ [JsonPropertyName("provenance")]
+ public required CatalogTrustProvenance Provenance { get; set; }
+
+ /// Schema version of this runtime-owned snapshot envelope.
+ [JsonPropertyName("schemaVersion")]
+ public required CatalogTrustSnapshotSchemaVersion SchemaVersion { get; set; }
+}
+
+/// Discriminator: the trust field was empty, unbounded, or had the wrong JSON type.
+/// The malformed variant of .
+[Experimental(Diagnostics.Experimental)]
+public partial class CatalogTrustSnapshotMalformed : CatalogTrustSnapshot
+{
+ ///
+ [JsonIgnore]
+ public override string Status => "malformed";
+
+ /// Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field.
+ [JsonPropertyName("eligibility")]
+ public required CatalogTrustEligibility Eligibility { get; set; }
+
+ /// Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust.
+ [JsonPropertyName("provenance")]
+ public required CatalogTrustProvenance Provenance { get; set; }
+
+ /// Schema version of this runtime-owned snapshot envelope.
+ [JsonPropertyName("schemaVersion")]
+ public required CatalogTrustSnapshotSchemaVersion SchemaVersion { get; set; }
+}
+
/// An inert MCP server catalog result. Every free-text field is untrusted external data and must never be treated as an instruction, and the handle is the only way to refer to the candidate in a later operation.
/// The mcp-server variant of .
[Experimental(Diagnostics.Experimental)]
@@ -2575,6 +2774,11 @@ public partial class CatalogCandidateMcpServer : CatalogCandidate
/// Where the card came from: exactly one of a URL or embedded data, encoded as a tagged union so neither both nor neither can be represented.
[JsonPropertyName("source")]
public required CatalogCandidateSource Source { get; set; }
+
+ /// Versioned trust metadata observed from the catalog authority. Optional for protocol-3 compatibility with runtimes that predate trust snapshots. A trust-capable runtime emits an explicit snapshot even when the authority omitted or malformed its trust field.
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("trust")]
+ public CatalogTrustSnapshot? Trust { get; set; }
}
/// Where and when an AI skill catalog reference was observed. Discovery provenance deliberately carries no content digest because search does not establish the exact validated content a later plan will bind.
@@ -2650,6 +2854,11 @@ public partial class CatalogCandidateAiSkill : CatalogCandidate
/// Where the card came from: exactly one of a URL or embedded data, encoded as a tagged union so neither both nor neither can be represented.
[JsonPropertyName("source")]
public required CatalogCandidateSource Source { get; set; }
+
+ /// Versioned trust metadata observed from the catalog authority. Optional for protocol-3 compatibility with runtimes that predate trust snapshots. A trust-capable runtime emits an explicit snapshot even when the authority omitted or malformed its trust field.
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("trust")]
+ public CatalogTrustSnapshot? Trust { get; set; }
}
/// A completed catalog search: inert candidate summaries, each carrying a single-use handle.
@@ -2708,9 +2917,9 @@ public partial class CatalogSearchResultNegotiationRefused : CatalogSearchResult
[JsonPropertyName("runtimeProtocolVersion")]
public required long RuntimeProtocolVersion { get; set; }
- /// Every wire feature this runtime understands, so the caller can retry within that contract. This list does not imply that every deployment has enabled every operation.
+ /// Capabilities this runtime can safely advertise to this caller. The complete five-capability protocol-3 legacy set is always present; every capability added after that baseline appears only when the caller required it, so an older closed-enum decoder can still consume a refusal. This list does not imply that every deployment has enabled every operation.
[JsonPropertyName("supportedCapabilities")]
- public required IList SupportedCapabilities { get; set; }
+ public required IList SupportedCapabilities { get; set; }
/// The subset of the caller's bounded extensible capability identifiers this runtime cannot honour.
[JsonPropertyName("unsupportedCapabilities")]
@@ -4527,7 +4736,7 @@ public sealed class EventsReadResult
[JsonPropertyName("cursor")]
public string Cursor { get; set; } = string.Empty;
- /// Cursor status: 'ok' means the cursor was applied successfully; 'expired' means the cursor referred to an event that no longer exists in history (e.g. truncated or compacted away) and the read fell back to a boundary of the remaining history. For a forward read the fallback starts from the beginning of the remaining history; for a backward read it falls back to the tail (the newest window). Because the fallback page is a fresh boundary snapshot rather than a continuation of the requested cursor, it may overlap events the consumer has already rendered — a backward fallback to the tail in particular can repeat the newest window. On 'expired', consumers should reset or rebase their local pagination state (or deduplicate by event id) before continuing from the returned cursor rather than blindly appending/prepending the fallback page.
+ /// Cursor status: 'ok' means the cursor was applied successfully. For session.eventLog.read, 'expired' means the cursor referred to an event that no longer exists in active history and the read fell back to a boundary of the remaining history: the beginning for a forward read or the newest window for a backward read. That fallback may overlap already rendered events, so active-session consumers should reset, rebase, or deduplicate before continuing. sessions.readPersistedEvents has stricter snapshot semantics: 'expired' returns an empty terminal page and never switches to a replacement journal generation. Other persisted-read I/O failures are RPC errors with diagnostics, not cursor expiry.
[JsonPropertyName("cursorStatus")]
public EventsCursorStatus CursorStatus { get; set; }
@@ -4535,7 +4744,7 @@ public sealed class EventsReadResult
[JsonPropertyName("events")]
public IList Events { get => field ??= []; set; }
- /// True when more events are available in the read's direction. For a forward read, true means the batch returned `max` events and more are available immediately. For a backward read, true means older persisted events remain before the returned window.
+ /// True when more events are available in the read's direction. For a backward read, true means older persisted events remain before the returned window. A persisted-event page may contain fewer than `max` events because of its byte budget while still reporting hasMore true; continue according to this flag rather than the event count.
[JsonPropertyName("hasMore")]
public bool HasMore { get; set; }
}
@@ -4544,15 +4753,15 @@ public sealed class EventsReadResult
[Experimental(Diagnostics.Experimental)]
internal sealed class SessionsReadPersistedEventsRequest
{
- /// Opaque cursor returned by a previous persisted-event read. Omit on the first call.
+ /// Opaque, process-local, single-use cursor returned by the previous persisted-event read. Omit on the first call and issue continuations sequentially; reusing the same cursor returns an expired terminal page.
[JsonPropertyName("cursor")]
public string? Cursor { get; set; }
- /// Direction to page through persisted history. Forward starts at the beginning; backward starts with the newest events. Events in each page remain chronological.
+ /// Direction to page through persisted history. Forward starts at the beginning; backward starts with the newest events. Events in each page remain chronological. This selects the initial read only; a continuation always uses the direction bound into its cursor.
[JsonPropertyName("direction")]
public EventsReadDirection? Direction { get; set; }
- /// Maximum number of events to return in this batch (1–1000, default 200).
+ /// Maximum number of events to return in this batch (1–1000, default 200). Pages may contain fewer events to keep the serialized event array within a soft 1 MiB budget including resolved binary assets; one oversized event is returned alone to guarantee progress.
[JsonPropertyName("max")]
public long? Max { get; set; }
@@ -8063,6 +8272,10 @@ internal sealed class ModelApplyStartupOverlayRequest
[JsonPropertyName("policyHelperModel")]
public string? PolicyHelperModel { get; set; }
+ /// Auto routing preference selected by repository settings, when configured. Applied only when the overlay selects the Auto model; beside a concrete model it stays dormant.
+ [JsonPropertyName("repoAutoTier")]
+ public string? RepoAutoTier { get; set; }
+
/// Context tier selected by repository settings, when configured.
[JsonPropertyName("repoContextTier")]
public string? RepoContextTier { get; set; }
@@ -8225,6 +8438,10 @@ public sealed class ModeSetResult
[JsonPropertyName("message")]
public string? Message { get; set; }
+ /// Whether the requested mode was applied to the session. False only when an 'expectedMode' precondition did not hold, in which case any model change reported alongside it was still applied.
+ [JsonPropertyName("modeApplied")]
+ public bool? ModeApplied { get; set; }
+
/// Whether applying the mode changed the active model.
[JsonPropertyName("modelChanged")]
public bool ModelChanged { get; set; }
@@ -8246,6 +8463,10 @@ internal sealed class ModeSetRequest
[JsonPropertyName("compactionDecision")]
public string? CompactionDecision { get; set; }
+ /// 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'.
+ [JsonPropertyName("expectedMode")]
+ public SessionMode? ExpectedMode { get; set; }
+
/// Session whose plan-mode base state should be inherited.
[JsonPropertyName("inheritPlanBaseFromSessionId")]
public string? InheritPlanBaseFromSessionId { get; set; }
@@ -9121,10 +9342,19 @@ public sealed class FleetStartResult
public bool Started { get; set; }
}
-/// Optional user prompt to combine with the fleet orchestration instructions.
+/// Parameters for starting fleet orchestration: an optional user prompt combined with the fleet instructions, plus the send options forwarded to the resulting turn.
[Experimental(Diagnostics.Experimental)]
internal sealed class FleetStartRequest
{
+ /// Optional attachments (files, directories, selections, blobs, GitHub references) to include with the fleet request.
+ [JsonPropertyName("attachments")]
+ public IList? Attachments { get; set; }
+
+ /// If false, this request will not trigger a Premium Request Unit charge. User requests default to billable.
+ [JsonInclude]
+ [JsonPropertyName("billable")]
+ internal bool? Billable { get; set; }
+
/// Optional user prompt to combine with fleet instructions.
[JsonPropertyName("prompt")]
public string? Prompt { get; set; }
@@ -9132,6 +9362,10 @@ internal sealed class FleetStartRequest
/// Target session identifier.
[JsonPropertyName("sessionId")]
public string SessionId { get; set; } = string.Empty;
+
+ /// If true, await completion of the agentic loop for this fleet request before returning. Defaults to false.
+ [JsonPropertyName("wait")]
+ public bool? Wait { get; set; }
}
/// Agents available to the session.
@@ -20655,6 +20889,9 @@ public CatalogCapability(string value)
/// Understands plans that enumerate every eligible transport rather than a single preferred one.
public static CatalogCapability MultipleTransportChoice { get; } = new("multiple-transport-choice");
+ /// Understands versioned candidate trust snapshots. Protocol-3 callers must require this capability before the runtime adds the optional snapshot field.
+ public static CatalogCapability TrustSnapshot { get; } = new("trust-snapshot");
+
/// Returns a value indicating whether two instances are equivalent.
public static bool operator ==(CatalogCapability left, CatalogCapability right) => left.Equals(right);
@@ -22504,6 +22741,258 @@ public override void Write(Utf8JsonWriter writer, CatalogMcpServerInstallability
}
+/// Authority-computed exposure eligibility, kept separate from tier. The current tier-only Agent Finder response maps to `unknown`, never to a locally inferred eligibility.
+[Experimental(Diagnostics.Experimental)]
+[JsonConverter(typeof(Converter))]
+[DebuggerDisplay("{Value,nq}")]
+public readonly struct CatalogTrustEligibility : IEquatable
+{
+ private readonly string? _value;
+
+ /// Initializes a new instance of the struct.
+ /// The value to associate with this .
+ [JsonConstructor]
+ public CatalogTrustEligibility(string value)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(value);
+ _value = value;
+ }
+
+ /// Gets the value associated with this .
+ public string Value => _value ?? string.Empty;
+
+ /// Eligible for default catalogue exposure.
+ public static CatalogTrustEligibility Default { get; } = new("default");
+
+ /// Eligible only when expanded or community results are requested.
+ public static CatalogTrustEligibility Expanded { get; } = new("expanded");
+
+ /// Not eligible for normal catalogue exposure.
+ public static CatalogTrustEligibility Hidden { get; } = new("hidden");
+
+ /// The authority did not supply an eligibility decision.
+ public static CatalogTrustEligibility Unknown { get; } = new("unknown");
+
+ /// Returns a value indicating whether two instances are equivalent.
+ public static bool operator ==(CatalogTrustEligibility left, CatalogTrustEligibility right) => left.Equals(right);
+
+ /// Returns a value indicating whether two instances are not equivalent.
+ public static bool operator !=(CatalogTrustEligibility left, CatalogTrustEligibility right) => !(left == right);
+
+ ///
+ public override bool Equals(object? obj) => obj is CatalogTrustEligibility other && Equals(other);
+
+ ///
+ public bool Equals(CatalogTrustEligibility other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
+
+ ///
+ public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
+
+ ///
+ public override string ToString() => Value;
+
+ /// Provides a for serializing instances.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class Converter : JsonConverter
+ {
+ ///
+ public override CatalogTrustEligibility Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, CatalogTrustEligibility value, JsonSerializerOptions options)
+ {
+ GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(CatalogTrustEligibility));
+ }
+ }
+}
+
+
+/// Bounded authority that supplied a catalogue trust observation.
+[Experimental(Diagnostics.Experimental)]
+[JsonConverter(typeof(Converter))]
+[DebuggerDisplay("{Value,nq}")]
+public readonly struct CatalogTrustSource : IEquatable
+{
+ private readonly string? _value;
+
+ /// Initializes a new instance of the struct.
+ /// The value to associate with this .
+ [JsonConstructor]
+ public CatalogTrustSource(string value)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(value);
+ _value = value;
+ }
+
+ /// Gets the value associated with this .
+ public string Value => _value ?? string.Empty;
+
+ /// GitHub Agent Finder supplied the trust field on its search result.
+ public static CatalogTrustSource AgentFinder { get; } = new("agent-finder");
+
+ /// Returns a value indicating whether two instances are equivalent.
+ public static bool operator ==(CatalogTrustSource left, CatalogTrustSource right) => left.Equals(right);
+
+ /// Returns a value indicating whether two instances are not equivalent.
+ public static bool operator !=(CatalogTrustSource left, CatalogTrustSource right) => !(left == right);
+
+ ///
+ public override bool Equals(object? obj) => obj is CatalogTrustSource other && Equals(other);
+
+ ///
+ public bool Equals(CatalogTrustSource other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
+
+ ///
+ public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
+
+ ///
+ public override string ToString() => Value;
+
+ /// Provides a for serializing instances.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class Converter : JsonConverter
+ {
+ ///
+ public override CatalogTrustSource Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, CatalogTrustSource value, JsonSerializerOptions options)
+ {
+ GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(CatalogTrustSource));
+ }
+ }
+}
+
+
+/// Schema version of the catalogue trust snapshot envelope.
+[Experimental(Diagnostics.Experimental)]
+[JsonConverter(typeof(Converter))]
+[DebuggerDisplay("{Value,nq}")]
+public readonly struct CatalogTrustSnapshotSchemaVersion : IEquatable
+{
+ private readonly string? _value;
+
+ /// Initializes a new instance of the struct.
+ /// The value to associate with this .
+ [JsonConstructor]
+ public CatalogTrustSnapshotSchemaVersion(string value)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(value);
+ _value = value;
+ }
+
+ /// Gets the value associated with this .
+ public string Value => _value ?? string.Empty;
+
+ /// Initial envelope carrying one bounded service tier or one explicit unavailable state.
+ public static CatalogTrustSnapshotSchemaVersion V1 { get; } = new("v1");
+
+ /// Returns a value indicating whether two instances are equivalent.
+ public static bool operator ==(CatalogTrustSnapshotSchemaVersion left, CatalogTrustSnapshotSchemaVersion right) => left.Equals(right);
+
+ /// Returns a value indicating whether two instances are not equivalent.
+ public static bool operator !=(CatalogTrustSnapshotSchemaVersion left, CatalogTrustSnapshotSchemaVersion right) => !(left == right);
+
+ ///
+ public override bool Equals(object? obj) => obj is CatalogTrustSnapshotSchemaVersion other && Equals(other);
+
+ ///
+ public bool Equals(CatalogTrustSnapshotSchemaVersion other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
+
+ ///
+ public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
+
+ ///
+ public override string ToString() => Value;
+
+ /// Provides a for serializing instances.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class Converter : JsonConverter
+ {
+ ///
+ public override CatalogTrustSnapshotSchemaVersion Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, CatalogTrustSnapshotSchemaVersion value, JsonSerializerOptions options)
+ {
+ GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(CatalogTrustSnapshotSchemaVersion));
+ }
+ }
+}
+
+
+/// Service-computed trust tier currently emitted by Agent Finder. It is independent of search score, popularity, and client-side ranking.
+[Experimental(Diagnostics.Experimental)]
+[JsonConverter(typeof(Converter))]
+[DebuggerDisplay("{Value,nq}")]
+public readonly struct CatalogTrustTier : IEquatable
+{
+ private readonly string? _value;
+
+ /// Initializes a new instance of the struct.
+ /// The value to associate with this .
+ [JsonConstructor]
+ public CatalogTrustTier(string value)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(value);
+ _value = value;
+ }
+
+ /// Gets the value associated with this .
+ public string Value => _value ?? string.Empty;
+
+ /// Tier one as assigned by the catalogue authority.
+ public static CatalogTrustTier T1 { get; } = new("T1");
+
+ /// Tier two as assigned by the catalogue authority.
+ public static CatalogTrustTier T2 { get; } = new("T2");
+
+ /// Returns a value indicating whether two instances are equivalent.
+ public static bool operator ==(CatalogTrustTier left, CatalogTrustTier right) => left.Equals(right);
+
+ /// Returns a value indicating whether two instances are not equivalent.
+ public static bool operator !=(CatalogTrustTier left, CatalogTrustTier right) => !(left == right);
+
+ ///
+ public override bool Equals(object? obj) => obj is CatalogTrustTier other && Equals(other);
+
+ ///
+ public bool Equals(CatalogTrustTier other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
+
+ ///
+ public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
+
+ ///
+ public override string ToString() => Value;
+
+ /// Provides a for serializing instances.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class Converter : JsonConverter
+ {
+ ///
+ public override CatalogTrustTier Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, CatalogTrustTier value, JsonSerializerOptions options)
+ {
+ GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(CatalogTrustTier));
+ }
+ }
+}
+
+
/// What kind of resource a catalog candidate describes.
[Experimental(Diagnostics.Experimental)]
[JsonConverter(typeof(Converter))]
@@ -23839,7 +24328,7 @@ public override void Write(Utf8JsonWriter writer, SessionSource value, JsonSeria
}
-/// Cursor status: 'ok' means the cursor was applied successfully; 'expired' means the cursor referred to an event that no longer exists in history (e.g. truncated or compacted away) and the read fell back to a boundary of the remaining history (the beginning for a forward read, the tail for a backward read). The fallback page is a fresh boundary snapshot, not a continuation of the requested cursor, so it may overlap already-rendered events; on 'expired' a consumer should reset/rebase its pagination state (or deduplicate by event id) before continuing from the returned cursor.
+/// Cursor status: 'ok' means the read succeeded against the requested history; 'expired' means the requested continuation is unavailable. Recovery is endpoint-specific: session.eventLog.read returns a boundary window of remaining active history that may overlap prior pages, while sessions.readPersistedEvents returns an empty terminal page and never switches journal generations. An expired persisted read is not successful completion; a complete persisted snapshot requires cursorStatus 'ok' and hasMore false.
[Experimental(Diagnostics.Experimental)]
[JsonConverter(typeof(Converter))]
[DebuggerDisplay("{Value,nq}")]
@@ -23859,10 +24348,10 @@ public EventsCursorStatus(string value)
/// Gets the value associated with this .
public string Value => _value ?? string.Empty;
- /// The cursor was applied successfully.
+ /// The read succeeded against the requested history.
public static EventsCursorStatus Ok { get; } = new("ok");
- /// The cursor referred to history that is no longer available.
+ /// The requested continuation is unavailable; see the endpoint's recovery semantics.
public static EventsCursorStatus Expired { get; } = new("expired");
/// Returns a value indicating whether two instances are equivalent.
@@ -24838,75 +25327,6 @@ public override void Write(Utf8JsonWriter writer, PermissionResponseCapability v
}
-/// Controlled reason or actor responsible for a permission response.
-[Experimental(Diagnostics.Experimental)]
-[JsonConverter(typeof(Converter))]
-[DebuggerDisplay("{Value,nq}")]
-public readonly struct PermissionDecisionSource : IEquatable
-{
- private readonly string? _value;
-
- /// Initializes a new instance of the struct.
- /// The value to associate with this .
- [JsonConstructor]
- public PermissionDecisionSource(string value)
- {
- ArgumentException.ThrowIfNullOrWhiteSpace(value);
- _value = value;
- }
-
- /// Gets the value associated with this .
- public string Value => _value ?? string.Empty;
-
- /// The response followed the assisted-approval judge recommendation.
- public static PermissionDecisionSource AssistedApproval { get; } = new("assisted_approval");
-
- /// A human supplied the response through an interactive prompt.
- public static PermissionDecisionSource HumanResponse { get; } = new("human_response");
-
- /// The host applied a standing policy or override rather than a judge recommendation or human decision.
- public static PermissionDecisionSource HostPolicy { get; } = new("host_policy");
-
- /// The host denied the request because no interactive user response was available.
- public static PermissionDecisionSource UnattendedFallback { get; } = new("unattended_fallback");
-
- /// Returns a value indicating whether two instances are equivalent.
- public static bool operator ==(PermissionDecisionSource left, PermissionDecisionSource right) => left.Equals(right);
-
- /// Returns a value indicating whether two instances are not equivalent.
- public static bool operator !=(PermissionDecisionSource left, PermissionDecisionSource right) => !(left == right);
-
- ///
- public override bool Equals(object? obj) => obj is PermissionDecisionSource other && Equals(other);
-
- ///
- public bool Equals(PermissionDecisionSource other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
-
- ///
- public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
-
- ///
- public override string ToString() => Value;
-
- /// Provides a for serializing instances.
- [EditorBrowsable(EditorBrowsableState.Never)]
- public sealed class Converter : JsonConverter
- {
- ///
- public override PermissionDecisionSource Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
- }
-
- ///
- public override void Write(Utf8JsonWriter writer, PermissionDecisionSource value, JsonSerializerOptions options)
- {
- GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(PermissionDecisionSource));
- }
- }
-}
-
-
/// Client surface that submitted a permission response.
[Experimental(Diagnostics.Experimental)]
[JsonConverter(typeof(Converter))]
@@ -32888,11 +33308,11 @@ public async Task> GetClientMetadataAsync(ILi
return await CopilotClient.InvokeRpcAsync>(_rpc, "sessions.getClientMetadata", [request], cancellationToken);
}
- /// Reads a page of durable events directly from a local session's persisted journal without creating, resuming, or activating the session. The initial backward read uses a bounded tail scan for fast first paint; cursor continuations preserve the session event-log paging semantics. Persisted events may omit payloads that are reconstructed only for an active session.
+ /// Reads a page of durable events directly from a local session's persisted journal without creating, resuming, or activating the session. The first read pins the currently opened journal generation and its byte-length boundary; opaque cursor continuations remain on that generation across runtime-owned compaction, truncation, and rewrite operations, which replace the live path atomically, and events appended after the boundary are excluded. For cold hydration, await the first successful page before activation and establish lossless live-event buffering before resume; merge subsequent live events by ID, preserving persisted order and letting live payloads win. Continuations are process-local, single-use capabilities bound to the originating session and storage context and must be paged sequentially; concurrent or repeated use of the same cursor expires that duplicate read rather than reading the generation twice. A complete snapshot has cursorStatus 'ok' and hasMore false. Snapshots expire after five idle minutes, with at most eight retained per process and idle-only eviction under pressure; completion and cancelled-worker exit release their handles. No transcript copy is created, but retained handles may keep replaced files' disk blocks alive until release. Pages have a soft 1 MiB serialized event-array budget including resolved binary assets; one oversized event is returned alone to guarantee progress. Working memory also includes a record/lookahead and asset resolution; resolving the first binary reference may scan the full pinned generation to build a bounded offset index. If the snapshot expires, is evicted, is cancelled before a continuation is established, or becomes unreadable after an observable unsupported in-place shortening, the continuation returns cursorStatus 'expired' with an empty terminal page and never falls back to a different generation. A missing or initially unreadable journal is an RPC error. Persisted history excludes ephemeral events and may omit payloads that are reconstructed only for an active session; use the active session event stream for post-resume live events.
/// Session ID whose persisted event journal should be read.
- /// Opaque cursor returned by a previous persisted-event read. Omit on the first call.
- /// Maximum number of events to return in this batch (1–1000, default 200).
- /// Direction to page through persisted history. Forward starts at the beginning; backward starts with the newest events. Events in each page remain chronological.
+ /// Opaque, process-local, single-use cursor returned by the previous persisted-event read. Omit on the first call and issue continuations sequentially; reusing the same cursor returns an expired terminal page.
+ /// Maximum number of events to return in this batch (1–1000, default 200). Pages may contain fewer events to keep the serialized event array within a soft 1 MiB budget including resolved binary assets; one oversized event is returned alone to guarantee progress.
+ /// Direction to page through persisted history. Forward starts at the beginning; backward starts with the newest events. Events in each page remain chronological. This selects the initial read only; a continuation always uses the direction bound into its cursor.
/// The to monitor for cancellation requests. The default is .
/// Batch of session events returned by a read, with cursor and continuation metadata.
public async Task ReadPersistedEventsAsync(string sessionId, string? cursor = null, long? max = null, EventsReadDirection? direction = null, CancellationToken cancellationToken = default)
@@ -34306,15 +34726,16 @@ public async Task SwitchAutoTierAsync(AutoTier? autoT
/// Model selected by repository settings, when configured.
/// Reasoning effort selected by repository settings, when configured.
/// Context tier selected by repository settings, when configured.
+ /// Auto routing preference selected by repository settings, when configured. Applied only when the overlay selects the Auto model; beside a concrete model it stays dormant.
/// Model explicitly selected by the CLI, when provided.
/// Whether the overlay is being applied while resuming a deferred session.
/// The to monitor for cancellation requests. The default is .
/// The model identifier active on the session after the switch.
- internal async Task ApplyStartupOverlayAsync(string? deviceManagedModel = null, string? serverManagedModel = null, string? policyHelperModel = null, string? repoModel = null, string? repoReasoningEffort = null, string? repoContextTier = null, string? cliModel = null, bool? deferredResume = null, CancellationToken cancellationToken = default)
+ internal async Task ApplyStartupOverlayAsync(string? deviceManagedModel = null, string? serverManagedModel = null, string? policyHelperModel = null, string? repoModel = null, string? repoReasoningEffort = null, string? repoContextTier = null, string? repoAutoTier = null, string? cliModel = null, bool? deferredResume = null, CancellationToken cancellationToken = default)
{
_session.ThrowIfDisposed();
- var request = new ModelApplyStartupOverlayRequest { SessionId = _session.SessionId, DeviceManagedModel = deviceManagedModel, ServerManagedModel = serverManagedModel, PolicyHelperModel = policyHelperModel, RepoModel = repoModel, RepoReasoningEffort = repoReasoningEffort, RepoContextTier = repoContextTier, CliModel = cliModel, DeferredResume = deferredResume };
+ var request = new ModelApplyStartupOverlayRequest { SessionId = _session.SessionId, DeviceManagedModel = deviceManagedModel, ServerManagedModel = serverManagedModel, PolicyHelperModel = policyHelperModel, RepoModel = repoModel, RepoReasoningEffort = repoReasoningEffort, RepoContextTier = repoContextTier, RepoAutoTier = repoAutoTier, CliModel = cliModel, DeferredResume = deferredResume };
return await CopilotClient.InvokeRpcAsync(_session.Rpc, "session.model.applyStartupOverlay", [request], cancellationToken);
}
@@ -34380,6 +34801,7 @@ public async Task GetAsync(CancellationToken cancellationToken = de
/// Sets the current agent interaction mode.
/// The session mode the agent is operating in.
+ /// 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'.
/// Session whose plan-mode base state should be inherited.
/// Whether a dedicated plan model is configured.
/// Dedicated model to use in plan mode, when configured.
@@ -34392,11 +34814,11 @@ public async Task GetAsync(CancellationToken cancellationToken = de
/// Action to perform when leaving plan mode.
/// The to monitor for cancellation requests. The default is .
/// Outcome of a session mode change, including any model switch it triggered and follow-up the host must perform.
- public async Task SetAsync(SessionMode mode, string? inheritPlanBaseFromSessionId = null, bool? planModelConfigured = null, string? planModel = null, string? planReasoningEffort = null, string? planContextTier = null, string? compactionDecision = null, bool? restorePlanModel = null, bool? persistPlanSelection = null, ModelPickerSettingsContext? pickerSettingsContext = null, string? planExitAction = null, CancellationToken cancellationToken = default)
+ public async Task SetAsync(SessionMode mode, SessionMode? expectedMode = null, string? inheritPlanBaseFromSessionId = null, bool? planModelConfigured = null, string? planModel = null, string? planReasoningEffort = null, string? planContextTier = null, string? compactionDecision = null, bool? restorePlanModel = null, bool? persistPlanSelection = null, ModelPickerSettingsContext? pickerSettingsContext = null, string? planExitAction = null, CancellationToken cancellationToken = default)
{
_session.ThrowIfDisposed();
- var request = new ModeSetRequest { SessionId = _session.SessionId, Mode = mode, InheritPlanBaseFromSessionId = inheritPlanBaseFromSessionId, PlanModelConfigured = planModelConfigured, PlanModel = planModel, PlanReasoningEffort = planReasoningEffort, PlanContextTier = planContextTier, CompactionDecision = compactionDecision, RestorePlanModel = restorePlanModel, PersistPlanSelection = persistPlanSelection, PickerSettingsContext = pickerSettingsContext, PlanExitAction = planExitAction };
+ var request = new ModeSetRequest { SessionId = _session.SessionId, Mode = mode, ExpectedMode = expectedMode, InheritPlanBaseFromSessionId = inheritPlanBaseFromSessionId, PlanModelConfigured = planModelConfigured, PlanModel = planModel, PlanReasoningEffort = planReasoningEffort, PlanContextTier = planContextTier, CompactionDecision = compactionDecision, RestorePlanModel = restorePlanModel, PersistPlanSelection = persistPlanSelection, PickerSettingsContext = pickerSettingsContext, PlanExitAction = planExitAction };
return await CopilotClient.InvokeRpcAsync(_session.Rpc, "session.mode.set", [request], cancellationToken);
}
}
@@ -34820,13 +35242,16 @@ internal FleetApi(CopilotSession session)
/// Starts fleet mode by submitting the fleet orchestration prompt to the session.
/// Optional user prompt to combine with fleet instructions.
+ /// Optional attachments (files, directories, selections, blobs, GitHub references) to include with the fleet request.
+ /// If false, this request will not trigger a Premium Request Unit charge. User requests default to billable.
+ /// If true, await completion of the agentic loop for this fleet request before returning. Defaults to false.
/// The to monitor for cancellation requests. The default is .
/// Indicates whether fleet mode was successfully activated.
- public async Task StartAsync(string? prompt = null, CancellationToken cancellationToken = default)
+ public async Task StartAsync(string? prompt = null, IList? attachments = null, bool? billable = null, bool? wait = null, CancellationToken cancellationToken = default)
{
_session.ThrowIfDisposed();
- var request = new FleetStartRequest { SessionId = _session.SessionId, Prompt = prompt };
+ var request = new FleetStartRequest { SessionId = _session.SessionId, Prompt = prompt, Attachments = attachments, Billable = billable, Wait = wait };
return await CopilotClient.InvokeRpcAsync(_session.Rpc, "session.fleet.start", [request], cancellationToken);
}
}
@@ -38310,8 +38735,18 @@ public static void RegisterClientGlobalApiHandlers(JsonRpc rpc, ClientGlobalApiH
[JsonSerializable(typeof(GitHub.Copilot.PendingMessagesModifiedData), TypeInfoPropertyName = "SessionEventsPendingMessagesModifiedData")]
[JsonSerializable(typeof(GitHub.Copilot.PendingMessagesModifiedEvent), TypeInfoPropertyName = "SessionEventsPendingMessagesModifiedEvent")]
[JsonSerializable(typeof(GitHub.Copilot.PermissionAssistedApproval), TypeInfoPropertyName = "SessionEventsPermissionAssistedApproval")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionCarriedForwardData), TypeInfoPropertyName = "SessionEventsPermissionCarriedForwardData")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionCarriedForwardEvent), TypeInfoPropertyName = "SessionEventsPermissionCarriedForwardEvent")]
[JsonSerializable(typeof(GitHub.Copilot.PermissionCompletedData), TypeInfoPropertyName = "SessionEventsPermissionCompletedData")]
[JsonSerializable(typeof(GitHub.Copilot.PermissionCompletedEvent), TypeInfoPropertyName = "SessionEventsPermissionCompletedEvent")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionDecisionSource), TypeInfoPropertyName = "SessionEventsPermissionDecisionSource")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionMessageAuthorizationData), TypeInfoPropertyName = "SessionEventsPermissionMessageAuthorizationData")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionMessageAuthorizationDegradedData), TypeInfoPropertyName = "SessionEventsPermissionMessageAuthorizationDegradedData")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionMessageAuthorizationDegradedEvent), TypeInfoPropertyName = "SessionEventsPermissionMessageAuthorizationDegradedEvent")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionMessageAuthorizationEvent), TypeInfoPropertyName = "SessionEventsPermissionMessageAuthorizationEvent")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionMessageAuthorizationPolarity), TypeInfoPropertyName = "SessionEventsPermissionMessageAuthorizationPolarity")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionMessageAuthorizationReadData), TypeInfoPropertyName = "SessionEventsPermissionMessageAuthorizationReadData")]
+[JsonSerializable(typeof(GitHub.Copilot.PermissionMessageAuthorizationReadEvent), TypeInfoPropertyName = "SessionEventsPermissionMessageAuthorizationReadEvent")]
[JsonSerializable(typeof(GitHub.Copilot.PermissionMode), TypeInfoPropertyName = "SessionEventsPermissionMode")]
[JsonSerializable(typeof(GitHub.Copilot.PermissionPromptRequest), TypeInfoPropertyName = "SessionEventsPermissionPromptRequest")]
[JsonSerializable(typeof(GitHub.Copilot.PermissionPromptRequestCommands), TypeInfoPropertyName = "SessionEventsPermissionPromptRequestCommands")]
@@ -38553,6 +38988,8 @@ public static void RegisterClientGlobalApiHandlers(JsonRpc rpc, ClientGlobalApiH
[JsonSerializable(typeof(CatalogNegotiatedContract))]
[JsonSerializable(typeof(CatalogSearchRequest))]
[JsonSerializable(typeof(CatalogSearchResult))]
+[JsonSerializable(typeof(CatalogTrustProvenance))]
+[JsonSerializable(typeof(CatalogTrustSnapshot))]
[JsonSerializable(typeof(ClientTaskCancelRequest))]
[JsonSerializable(typeof(ClientTaskCancelResult))]
[JsonSerializable(typeof(CommandList))]
diff --git a/dotnet/src/Generated/SessionEvents.cs b/dotnet/src/Generated/SessionEvents.cs
index 2a81531d45..a58dae10ec 100644
--- a/dotnet/src/Generated/SessionEvents.cs
+++ b/dotnet/src/Generated/SessionEvents.cs
@@ -75,7 +75,11 @@ namespace GitHub.Copilot;
[JsonDerivedType(typeof(ModelCallFinishedEvent), "model.call_finished")]
[JsonDerivedType(typeof(ModelCallStartEvent), "model.call_start")]
[JsonDerivedType(typeof(PendingMessagesModifiedEvent), "pending_messages.modified")]
+[JsonDerivedType(typeof(PermissionCarriedForwardEvent), "permission.carriedForward")]
[JsonDerivedType(typeof(PermissionCompletedEvent), "permission.completed")]
+[JsonDerivedType(typeof(PermissionMessageAuthorizationEvent), "permission.messageAuthorization")]
+[JsonDerivedType(typeof(PermissionMessageAuthorizationDegradedEvent), "permission.messageAuthorizationDegraded")]
+[JsonDerivedType(typeof(PermissionMessageAuthorizationReadEvent), "permission.messageAuthorizationRead")]
[JsonDerivedType(typeof(PermissionRequestedEvent), "permission.requested")]
[JsonDerivedType(typeof(PromptCacheBreakEvent), "prompt_cache_break")]
[JsonDerivedType(typeof(SamplingCompletedEvent), "sampling.completed")]
@@ -1333,6 +1337,62 @@ public sealed partial class PermissionCompletedEvent : SessionEvent
public required PermissionCompletedData Data { get; set; }
}
+/// Records that a live authorization record from an earlier human decision in this session contained a permission proposal, so it ran without another prompt. This mints no authority: it accounts for one more effect against the prior grant, which is what lets a replayed session agree with the live one about how much of that grant is left.
+/// Represents the permission.carriedForward event.
+[Experimental(Diagnostics.Experimental)]
+public sealed partial class PermissionCarriedForwardEvent : SessionEvent
+{
+ ///
+ [JsonIgnore]
+ public override string Type => "permission.carriedForward";
+
+ /// The permission.carriedForward event payload.
+ [JsonPropertyName("data")]
+ public required PermissionCarriedForwardData Data { get; set; }
+}
+
+/// Freezes one blinded, verbatim-verified authorization claim the runtime minted from a human user message, so a resumed session re-establishes the same grant deterministically instead of re-running the extraction model. This mints no authority on its own: it records what a blinded proposer pointed at and the trusted discriminator the runtime established, and deterministic establishment runs on replay. Persisted so recorded authority survives compaction and process resume.
+/// Represents the permission.messageAuthorization event.
+[Experimental(Diagnostics.Experimental)]
+public sealed partial class PermissionMessageAuthorizationEvent : SessionEvent
+{
+ ///
+ [JsonIgnore]
+ public override string Type => "permission.messageAuthorization";
+
+ /// The permission.messageAuthorization event payload.
+ [JsonPropertyName("data")]
+ public required PermissionMessageAuthorizationData Data { get; set; }
+}
+
+/// Records that one human turn has been read by the blinded authorization proposer, whether or not it minted anything, so a resumed session does not re-run the extraction model on a turn the live session already read. Persisted purely to avoid wasted model calls across resume; it is never a correctness mechanism.
+/// Represents the permission.messageAuthorizationRead event.
+[Experimental(Diagnostics.Experimental)]
+public sealed partial class PermissionMessageAuthorizationReadEvent : SessionEvent
+{
+ ///
+ [JsonIgnore]
+ public override string Type => "permission.messageAuthorizationRead";
+
+ /// The permission.messageAuthorizationRead event payload.
+ [JsonPropertyName("data")]
+ public required PermissionMessageAuthorizationReadData Data { get; set; }
+}
+
+/// Records that message-backed authorization could not safely represent one human turn before compaction. The runtime may compact the original message after this marker is durable, but message-derived carry-forward and assisted auto-approval remain disabled for the rest of the session so subsequent commands continue through the ordinary permission prompt.
+/// Represents the permission.messageAuthorizationDegraded event.
+[Experimental(Diagnostics.Experimental)]
+public sealed partial class PermissionMessageAuthorizationDegradedEvent : SessionEvent
+{
+ ///
+ [JsonIgnore]
+ public override string Type => "permission.messageAuthorizationDegraded";
+
+ /// The permission.messageAuthorizationDegraded event payload.
+ [JsonPropertyName("data")]
+ public required PermissionMessageAuthorizationDegradedData Data { get; set; }
+}
+
/// User input request notification with question and optional predefined choices.
/// Represents the user_input.requested event.
public sealed partial class UserInputRequestedEvent : SessionEvent
@@ -4548,6 +4608,11 @@ public sealed partial class ToolExecutionStartData
[JsonPropertyName("mcpToolName")]
public string? McpToolName { get; set; }
+ /// Transport the MCP server hosting this tool is connected over, when the tool is an MCP tool and the server is configured.
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("mcpTransport")]
+ public McpServerTransport? McpTransport { get; set; }
+
/// Model identifier that generated this tool call.
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[JsonPropertyName("model")]
@@ -5195,6 +5260,12 @@ public sealed partial class PermissionRequestedData
/// Permission request completion notification signaling UI dismissal.
public sealed partial class PermissionCompletedData
{
+ /// Who decided this permission request. Absent on completions recorded before this field existed, which consumers must treat as "not a human decision" rather than assuming one. Authorization records are minted only for `human_response`; an assisted-approval verdict, a host policy, an unattended fallback, and a hook resolution all produce the same `result` a person does, so this is the only field that distinguishes them.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("decisionSource")]
+ public PermissionDecisionSource? DecisionSource { get; set; }
+
/// Request ID of the resolved permission request; clients should dismiss any UI for this request.
[JsonPropertyName("requestId")]
public required string RequestId { get; set; }
@@ -5209,6 +5280,104 @@ public sealed partial class PermissionCompletedData
public string? ToolCallId { get; set; }
}
+/// Records that a live authorization record from an earlier human decision in this session contained a permission proposal, so it ran without another prompt. This mints no authority: it accounts for one more effect against the prior grant, which is what lets a replayed session agree with the live one about how much of that grant is left.
+[Experimental(Diagnostics.Experimental)]
+public sealed partial class PermissionCarriedForwardData
+{
+ /// Always `authorization_carry_forward`. Stated explicitly so a consumer reading this event cannot mistake it for a human, host-policy, or assisted-approval decision.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("decisionSource")]
+ public required PermissionDecisionSource DecisionSource { get; set; }
+
+ /// Identity of the prior authorization record that contained the proposal.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("recordId")]
+ public required string RecordId { get; set; }
+
+ /// Authorization edge minted for this admission. Not a prompt id: no prompt was raised, so no client should expect a request with this id.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("requestId")]
+ public required string RequestId { get; set; }
+
+ /// Tool call this admission authorizes. Its execution receipts the prior grant, which is how a single-effect approval is spent rather than carried forward again.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("toolCallId")]
+ public required string ToolCallId { get; set; }
+}
+
+/// Freezes one blinded, verbatim-verified authorization claim the runtime minted from a human user message, so a resumed session re-establishes the same grant deterministically instead of re-running the extraction model. This mints no authority on its own: it records what a blinded proposer pointed at and the trusted discriminator the runtime established, and deterministic establishment runs on replay. Persisted so recorded authority survives compaction and process resume.
+[Experimental(Diagnostics.Experimental)]
+public sealed partial class PermissionMessageAuthorizationData
+{
+ /// The kind of effect authorized, as an action-class identifier.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("actionClass")]
+ public required string ActionClass { get; set; }
+
+ /// Whether the claim granted or denied authority.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("polarity")]
+ public required PermissionMessageAuthorizationPolarity Polarity { get; set; }
+
+ /// Deterministic identity of the record, derived from the turn and span offsets so re-extracting the same span mints nothing new.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("recordId")]
+ public required string RecordId { get; set; }
+
+ /// End byte offset of the authorizing span within the turn.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("spanEnd")]
+ public required long SpanEnd { get; set; }
+
+ /// Start byte offset of the authorizing span within the turn.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("spanStart")]
+ public required long SpanStart { get; set; }
+
+ /// Concrete named targets that appear verbatim inside the span.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("targetMembers")]
+ public string[]? TargetMembers { get; set; }
+
+ /// The task the permission is scoped to, when the human named one.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("task")]
+ public string? Task { get; set; }
+
+ /// The human turn the quoted span was read from.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("turnIndex")]
+ public required long TurnIndex { get; set; }
+
+ /// The trusted version discriminator, when one exists. Exact shell-command grants carry the byte-identical commands grounded in the human span; world-derived classes carry a file object, remote tip, or runner only when that state was captured safely. An opaque object mirroring the runtime's adjacently-tagged resolution.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("world")]
+ public JsonElement? World { get; set; }
+}
+
+/// Records that one human turn has been read by the blinded authorization proposer, whether or not it minted anything, so a resumed session does not re-run the extraction model on a turn the live session already read. Persisted purely to avoid wasted model calls across resume; it is never a correctness mechanism.
+[Experimental(Diagnostics.Experimental)]
+public sealed partial class PermissionMessageAuthorizationReadData
+{
+ /// The human turn that was read by the proposer.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("turnIndex")]
+ public required long TurnIndex { get; set; }
+}
+
+/// Records that message-backed authorization could not safely represent one human turn before compaction. The runtime may compact the original message after this marker is durable, but message-derived carry-forward and assisted auto-approval remain disabled for the rest of the session so subsequent commands continue through the ordinary permission prompt.
+[Experimental(Diagnostics.Experimental)]
+public sealed partial class PermissionMessageAuthorizationDegradedData
+{
+ /// The human turn that could not be represented safely.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonPropertyName("turnIndex")]
+ public required long TurnIndex { get; set; }
+}
+
/// User input request notification with question and optional predefined choices.
public sealed partial class UserInputRequestedData
{
@@ -8975,6 +9144,18 @@ public override bool? ManagedApprovalRequired
[JsonPropertyName("requestSandboxPermissive")]
public bool? RequestSandboxPermissive { get; set; }
+ /// Runtime-resolved canonical object each possiblePaths entry names, keyed by the requested spelling, used for authorization identity checks. Internal and experimental; clients should continue to display possiblePaths.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("resolvedPaths")]
+ public IDictionary? ResolvedPaths { get; set; }
+
+ /// Runtime-resolved canonical working directory the command runs in, used for authorization identity checks. Internal and experimental; clients should not display it.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("resolvedWorkingDirectory")]
+ public string? ResolvedWorkingDirectory { get; set; }
+
/// Tool call ID that triggered this permission request.
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[JsonPropertyName("toolCallId")]
@@ -9034,6 +9215,12 @@ public override bool? ManagedApprovalRequired
[JsonPropertyName("requestSandboxBypassReason")]
public string? RequestSandboxBypassReason { get; set; }
+ /// Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display fileName.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("resolvedPath")]
+ public string? ResolvedPath { get; set; }
+
/// Tool call ID that triggered this permission request.
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[JsonPropertyName("toolCallId")]
@@ -9075,6 +9262,12 @@ public override bool? ManagedApprovalRequired
[JsonPropertyName("requestSandboxBypassReason")]
public string? RequestSandboxBypassReason { get; set; }
+ /// Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display path.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("resolvedPath")]
+ public string? ResolvedPath { get; set; }
+
/// Tool call ID that triggered this permission request.
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[JsonPropertyName("toolCallId")]
@@ -9602,6 +9795,12 @@ public sealed partial class PermissionPromptRequestWrite : PermissionPromptReque
[JsonPropertyName("newFileContents")]
public string? NewFileContents { get; set; }
+ /// Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display fileName.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("resolvedPath")]
+ public string? ResolvedPath { get; set; }
+
/// Tool call ID that triggered this permission request.
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[JsonPropertyName("toolCallId")]
@@ -9635,6 +9834,12 @@ public sealed partial class PermissionPromptRequestRead : PermissionPromptReques
[JsonPropertyName("path")]
public required string Path { get; set; }
+ /// Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display path.
+ [Experimental(Diagnostics.Experimental)]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("resolvedPath")]
+ public string? ResolvedPath { get; set; }
+
/// Tool call ID that triggered this permission request.
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[JsonPropertyName("toolCallId")]
@@ -13864,6 +14069,73 @@ public override void Write(Utf8JsonWriter writer, AbortReason value, JsonSeriali
}
}
+/// Transport mechanism: stdio, http, sse (deprecated), or memory (in-process MCP server).
+[JsonConverter(typeof(Converter))]
+[DebuggerDisplay("{Value,nq}")]
+public readonly struct McpServerTransport : IEquatable
+{
+ private readonly string? _value;
+
+ /// Initializes a new instance of the struct.
+ /// The value to associate with this .
+ [JsonConstructor]
+ public McpServerTransport(string value)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(value);
+ _value = value;
+ }
+
+ /// Gets the value associated with this .
+ public string Value => _value ?? string.Empty;
+
+ /// Server communicates over stdio with a local child process.
+ public static McpServerTransport Stdio { get; } = new("stdio");
+
+ /// Server communicates over streamable HTTP.
+ public static McpServerTransport Http { get; } = new("http");
+
+ /// Server communicates over Server-Sent Events (deprecated).
+ public static McpServerTransport Sse { get; } = new("sse");
+
+ /// Server is backed by an in-memory runtime implementation.
+ public static McpServerTransport Memory { get; } = new("memory");
+
+ /// Returns a value indicating whether two instances are equivalent.
+ public static bool operator ==(McpServerTransport left, McpServerTransport right) => left.Equals(right);
+
+ /// Returns a value indicating whether two instances are not equivalent.
+ public static bool operator !=(McpServerTransport left, McpServerTransport right) => !(left == right);
+
+ ///
+ public override bool Equals(object? obj) => obj is McpServerTransport other && Equals(other);
+
+ ///
+ public bool Equals(McpServerTransport other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
+
+ ///
+ public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
+
+ ///
+ public override string ToString() => Value;
+
+ /// Provides a for serializing instances.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class Converter : JsonConverter
+ {
+ ///
+ public override McpServerTransport Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, McpServerTransport value, JsonSerializerOptions options)
+ {
+ GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(McpServerTransport));
+ }
+ }
+}
+
/// Allowed values for the `ToolExecutionStartToolDescriptionMetaUIVisibility` enumeration.
[JsonConverter(typeof(Converter))]
[DebuggerDisplay("{Value,nq}")]
@@ -15196,6 +15468,138 @@ public override void Write(Utf8JsonWriter writer, PermissionPromptRequestPathAcc
}
}
+/// Controlled reason or actor responsible for a permission response.
+[JsonConverter(typeof(Converter))]
+[DebuggerDisplay("{Value,nq}")]
+public readonly struct PermissionDecisionSource : IEquatable
+{
+ private readonly string? _value;
+
+ /// Initializes a new instance of the struct.
+ /// The value to associate with this .
+ [JsonConstructor]
+ public PermissionDecisionSource(string value)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(value);
+ _value = value;
+ }
+
+ /// Gets the value associated with this .
+ public string Value => _value ?? string.Empty;
+
+ /// The response followed the assisted-approval judge recommendation.
+ public static PermissionDecisionSource AssistedApproval { get; } = new("assisted_approval");
+
+ /// A human supplied the response through an interactive prompt.
+ public static PermissionDecisionSource HumanResponse { get; } = new("human_response");
+
+ /// The host applied a standing policy or override rather than a judge recommendation or human decision.
+ public static PermissionDecisionSource HostPolicy { get; } = new("host_policy");
+
+ /// The host denied the request because no interactive user response was available.
+ public static PermissionDecisionSource UnattendedFallback { get; } = new("unattended_fallback");
+
+ /// A live authorization record from an earlier human decision in this session contained the proposal, so it ran without another prompt. This is not a new human decision and never mints authority of its own.
+ public static PermissionDecisionSource AuthorizationCarryForward { get; } = new("authorization_carry_forward");
+
+ /// Returns a value indicating whether two instances are equivalent.
+ public static bool operator ==(PermissionDecisionSource left, PermissionDecisionSource right) => left.Equals(right);
+
+ /// Returns a value indicating whether two instances are not equivalent.
+ public static bool operator !=(PermissionDecisionSource left, PermissionDecisionSource right) => !(left == right);
+
+ ///
+ public override bool Equals(object? obj) => obj is PermissionDecisionSource other && Equals(other);
+
+ ///
+ public bool Equals(PermissionDecisionSource other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
+
+ ///
+ public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
+
+ ///
+ public override string ToString() => Value;
+
+ /// Provides a for serializing instances.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class Converter : JsonConverter
+ {
+ ///
+ public override PermissionDecisionSource Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, PermissionDecisionSource value, JsonSerializerOptions options)
+ {
+ GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(PermissionDecisionSource));
+ }
+ }
+}
+
+/// Which direction a message-backed authorization claim moves authority in.
+[Experimental(Diagnostics.Experimental)]
+[JsonConverter(typeof(Converter))]
+[DebuggerDisplay("{Value,nq}")]
+public readonly struct PermissionMessageAuthorizationPolarity : IEquatable
+{
+ private readonly string? _value;
+
+ /// Initializes a new instance of the struct.
+ /// The value to associate with this .
+ [JsonConstructor]
+ public PermissionMessageAuthorizationPolarity(string value)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(value);
+ _value = value;
+ }
+
+ /// Gets the value associated with this .
+ public string Value => _value ?? string.Empty;
+
+ /// The human's words authorized an effect.
+ public static PermissionMessageAuthorizationPolarity Grant { get; } = new("grant");
+
+ /// The human's words refused an effect.
+ public static PermissionMessageAuthorizationPolarity Denial { get; } = new("denial");
+
+ /// Returns a value indicating whether two instances are equivalent.
+ public static bool operator ==(PermissionMessageAuthorizationPolarity left, PermissionMessageAuthorizationPolarity right) => left.Equals(right);
+
+ /// Returns a value indicating whether two instances are not equivalent.
+ public static bool operator !=(PermissionMessageAuthorizationPolarity left, PermissionMessageAuthorizationPolarity right) => !(left == right);
+
+ ///
+ public override bool Equals(object? obj) => obj is PermissionMessageAuthorizationPolarity other && Equals(other);
+
+ ///
+ public bool Equals(PermissionMessageAuthorizationPolarity other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
+
+ ///
+ public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
+
+ ///
+ public override string ToString() => Value;
+
+ /// Provides a for serializing instances.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class Converter : JsonConverter
+ {
+ ///
+ public override PermissionMessageAuthorizationPolarity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, PermissionMessageAuthorizationPolarity value, JsonSerializerOptions options)
+ {
+ GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(PermissionMessageAuthorizationPolarity));
+ }
+ }
+}
+
/// Elicitation mode; "form" for structured input, "url" for browser-based. Defaults to "form" when absent.
[JsonConverter(typeof(Converter))]
[DebuggerDisplay("{Value,nq}")]
@@ -16467,73 +16871,6 @@ public override void Write(Utf8JsonWriter writer, McpServerStatus value, JsonSer
}
}
-/// Transport mechanism: stdio, http, sse (deprecated), or memory (in-process MCP server).
-[JsonConverter(typeof(Converter))]
-[DebuggerDisplay("{Value,nq}")]
-public readonly struct McpServerTransport : IEquatable
-{
- private readonly string? _value;
-
- /// Initializes a new instance of the struct.
- /// The value to associate with this .
- [JsonConstructor]
- public McpServerTransport(string value)
- {
- ArgumentException.ThrowIfNullOrWhiteSpace(value);
- _value = value;
- }
-
- /// Gets the value associated with this .
- public string Value => _value ?? string.Empty;
-
- /// Server communicates over stdio with a local child process.
- public static McpServerTransport Stdio { get; } = new("stdio");
-
- /// Server communicates over streamable HTTP.
- public static McpServerTransport Http { get; } = new("http");
-
- /// Server communicates over Server-Sent Events (deprecated).
- public static McpServerTransport Sse { get; } = new("sse");
-
- /// Server is backed by an in-memory runtime implementation.
- public static McpServerTransport Memory { get; } = new("memory");
-
- /// Returns a value indicating whether two instances are equivalent.
- public static bool operator ==(McpServerTransport left, McpServerTransport right) => left.Equals(right);
-
- /// Returns a value indicating whether two instances are not equivalent.
- public static bool operator !=(McpServerTransport left, McpServerTransport right) => !(left == right);
-
- ///
- public override bool Equals(object? obj) => obj is McpServerTransport other && Equals(other);
-
- ///
- public bool Equals(McpServerTransport other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
-
- ///
- public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
-
- ///
- public override string ToString() => Value;
-
- /// Provides a for serializing instances.
- [EditorBrowsable(EditorBrowsableState.Never)]
- public sealed class Converter : JsonConverter
- {
- ///
- public override McpServerTransport Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
- }
-
- ///
- public override void Write(Utf8JsonWriter writer, McpServerTransport value, JsonSerializerOptions options)
- {
- GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(McpServerTransport));
- }
- }
-}
-
/// Discovery source.
[JsonConverter(typeof(Converter))]
[DebuggerDisplay("{Value,nq}")]
@@ -16851,8 +17188,16 @@ public override void Write(Utf8JsonWriter writer, ExtensionsLoadedExtensionStatu
[JsonSerializable(typeof(PendingMessagesModifiedData))]
[JsonSerializable(typeof(PendingMessagesModifiedEvent))]
[JsonSerializable(typeof(PermissionAssistedApproval))]
+[JsonSerializable(typeof(PermissionCarriedForwardData))]
+[JsonSerializable(typeof(PermissionCarriedForwardEvent))]
[JsonSerializable(typeof(PermissionCompletedData))]
[JsonSerializable(typeof(PermissionCompletedEvent))]
+[JsonSerializable(typeof(PermissionMessageAuthorizationData))]
+[JsonSerializable(typeof(PermissionMessageAuthorizationDegradedData))]
+[JsonSerializable(typeof(PermissionMessageAuthorizationDegradedEvent))]
+[JsonSerializable(typeof(PermissionMessageAuthorizationEvent))]
+[JsonSerializable(typeof(PermissionMessageAuthorizationReadData))]
+[JsonSerializable(typeof(PermissionMessageAuthorizationReadEvent))]
[JsonSerializable(typeof(PermissionPromptRequest))]
[JsonSerializable(typeof(PermissionPromptRequestCommands))]
[JsonSerializable(typeof(PermissionPromptRequestCustomTool))]
diff --git a/go/rpc/zrpc.go b/go/rpc/zrpc.go
index fcdd3875de..fe6665e4e1 100644
--- a/go/rpc/zrpc.go
+++ b/go/rpc/zrpc.go
@@ -1504,6 +1504,10 @@ type CatalogAiSkillCandidate struct {
// Where the card came from: exactly one of a URL or embedded data, encoded as a tagged
// union so neither both nor neither can be represented.
Source CatalogCandidateSource `json:"source"`
+ // Versioned trust metadata observed from the catalog authority. Optional for protocol-3
+ // compatibility with runtimes that predate trust snapshots. A trust-capable runtime emits
+ // an explicit snapshot even when the authority omitted or malformed its trust field.
+ Trust CatalogTrustSnapshot `json:"trust,omitempty"`
}
func (CatalogAiSkillCandidate) catalogCandidate() {}
@@ -1538,6 +1542,10 @@ type CatalogMCPServerCandidate struct {
// Where the card came from: exactly one of a URL or embedded data, encoded as a tagged
// union so neither both nor neither can be represented.
Source CatalogCandidateSource `json:"source"`
+ // Versioned trust metadata observed from the catalog authority. Optional for protocol-3
+ // compatibility with runtimes that predate trust snapshots. A trust-capable runtime emits
+ // an explicit snapshot even when the authority omitted or malformed its trust field.
+ Trust CatalogTrustSnapshot `json:"trust,omitempty"`
}
func (CatalogMCPServerCandidate) catalogCandidate() {}
@@ -1769,9 +1777,12 @@ type CatalogNegotiationRefusedError struct {
Reason CatalogNegotiationRefusedReason `json:"reason"`
// Protocol version of the runtime that refused the request.
RuntimeProtocolVersion int64 `json:"runtimeProtocolVersion"`
- // Every wire feature this runtime understands, so the caller can retry within that
- // contract. This list does not imply that every deployment has enabled every operation.
- SupportedCapabilities []CatalogCapability `json:"supportedCapabilities"`
+ // Capabilities this runtime can safely advertise to this caller. The complete
+ // five-capability protocol-3 legacy set is always present; every capability added after
+ // that baseline appears only when the caller required it, so an older closed-enum decoder
+ // can still consume a refusal. This list does not imply that every deployment has enabled
+ // every operation.
+ SupportedCapabilities []string `json:"supportedCapabilities"`
// The subset of the caller's bounded extensible capability identifiers this runtime cannot
// honour.
UnsupportedCapabilities []string `json:"unsupportedCapabilities"`
@@ -1899,6 +1910,177 @@ func (CatalogUnsupportedKindError) Kind() CatalogSearchResultKind {
return CatalogSearchResultKindUnsupportedKind
}
+// Where and when the runtime observed the trust metadata. Observation time is not the
+// authority's evaluation time and must not be used to infer staleness.
+// Experimental: CatalogTrustProvenance is part of an experimental API and may change or be
+// removed.
+type CatalogTrustProvenance struct {
+ // ISO 8601 timestamp with a timezone offset at which the runtime observed the search result
+ // carrying this trust field.
+ ObservedAt time.Time `json:"observedAt"`
+ // Bounded authority that supplied the trust field.
+ Source CatalogTrustSource `json:"source"`
+}
+
+// A versioned, bounded trust observation carried unchanged with a catalog candidate and its
+// private handle context. Current observations require a recognised T1/T2 tier; every
+// non-current state structurally forbids a tier. Eligibility remains `unknown` while Agent
+// Finder supplies no exposure decision, and states absent from its current wire are never
+// inferred from age, relevance, popularity, or a tier transition.
+// Experimental: CatalogTrustSnapshot is part of an experimental API and may change or be
+// removed.
+type CatalogTrustSnapshot interface {
+ catalogTrustSnapshot()
+ SchemaVersion() CatalogTrustSnapshotSchemaVersion
+}
+
+type RawCatalogTrustSnapshotData struct {
+ Discriminator CatalogTrustSnapshotSchemaVersion
+ Raw json.RawMessage
+}
+
+func (RawCatalogTrustSnapshotData) catalogTrustSnapshot() {}
+func (r RawCatalogTrustSnapshotData) SchemaVersion() CatalogTrustSnapshotSchemaVersion {
+ return r.Discriminator
+}
+
+// Discriminator: the authority omitted trust metadata.
+// Experimental: CatalogTrustSnapshotAbsent is part of an experimental API and may change or
+// be removed.
+type CatalogTrustSnapshotAbsent struct {
+ // Service-computed exposure eligibility. `unknown` is required while Agent Finder returns
+ // no explicit eligibility field.
+ Eligibility CatalogTrustEligibility `json:"eligibility"`
+ // Bounded source and observation time for this snapshot. This is distinct from evidence
+ // used by the authority to calculate trust.
+ Provenance CatalogTrustProvenance `json:"provenance"`
+ // Discriminator: the authority omitted trust metadata.
+ Status CatalogTrustSnapshotAbsentStatus `json:"status"`
+}
+
+func (CatalogTrustSnapshotAbsent) catalogTrustSnapshot() {}
+func (CatalogTrustSnapshotAbsent) SchemaVersion() CatalogTrustSnapshotSchemaVersion {
+ return CatalogTrustSnapshotSchemaVersionV1
+}
+
+// A recognised current Agent Finder T1 or T2 trust tier.
+// Experimental: CatalogTrustSnapshotCurrent is part of an experimental API and may change
+// or be removed.
+type CatalogTrustSnapshotCurrent struct {
+ // Service-computed exposure eligibility. `unknown` is required while Agent Finder returns
+ // no explicit eligibility field.
+ Eligibility CatalogTrustEligibility `json:"eligibility"`
+ // Bounded source and observation time for this snapshot. This is distinct from evidence
+ // used by the authority to calculate trust.
+ Provenance CatalogTrustProvenance `json:"provenance"`
+ // Discriminator: a recognised current trust tier was observed.
+ Status CatalogTrustSnapshotCurrentStatus `json:"status"`
+ // Service-computed T1 or T2 trust tier.
+ Tier CatalogTrustTier `json:"tier"`
+}
+
+func (CatalogTrustSnapshotCurrent) catalogTrustSnapshot() {}
+func (CatalogTrustSnapshotCurrent) SchemaVersion() CatalogTrustSnapshotSchemaVersion {
+ return CatalogTrustSnapshotSchemaVersionV1
+}
+
+// Discriminator: the authority explicitly reported a downgraded assessment.
+// Experimental: CatalogTrustSnapshotDowngraded is part of an experimental API and may
+// change or be removed.
+type CatalogTrustSnapshotDowngraded struct {
+ // Service-computed exposure eligibility. `unknown` is required while Agent Finder returns
+ // no explicit eligibility field.
+ Eligibility CatalogTrustEligibility `json:"eligibility"`
+ // Bounded source and observation time for this snapshot. This is distinct from evidence
+ // used by the authority to calculate trust.
+ Provenance CatalogTrustProvenance `json:"provenance"`
+ // Discriminator: the authority explicitly reported a downgraded assessment.
+ Status CatalogTrustSnapshotDowngradedStatus `json:"status"`
+}
+
+func (CatalogTrustSnapshotDowngraded) catalogTrustSnapshot() {}
+func (CatalogTrustSnapshotDowngraded) SchemaVersion() CatalogTrustSnapshotSchemaVersion {
+ return CatalogTrustSnapshotSchemaVersionV1
+}
+
+// Discriminator: the trust field was empty, unbounded, or had the wrong JSON type.
+// Experimental: CatalogTrustSnapshotMalformed is part of an experimental API and may change
+// or be removed.
+type CatalogTrustSnapshotMalformed struct {
+ // Service-computed exposure eligibility. `unknown` is required while Agent Finder returns
+ // no explicit eligibility field.
+ Eligibility CatalogTrustEligibility `json:"eligibility"`
+ // Bounded source and observation time for this snapshot. This is distinct from evidence
+ // used by the authority to calculate trust.
+ Provenance CatalogTrustProvenance `json:"provenance"`
+ // Discriminator: the trust field was empty, unbounded, or had the wrong JSON type.
+ Status CatalogTrustSnapshotMalformedStatus `json:"status"`
+}
+
+func (CatalogTrustSnapshotMalformed) catalogTrustSnapshot() {}
+func (CatalogTrustSnapshotMalformed) SchemaVersion() CatalogTrustSnapshotSchemaVersion {
+ return CatalogTrustSnapshotSchemaVersionV1
+}
+
+// Discriminator: the authority explicitly revoked the assessment.
+// Experimental: CatalogTrustSnapshotRevoked is part of an experimental API and may change
+// or be removed.
+type CatalogTrustSnapshotRevoked struct {
+ // Service-computed exposure eligibility. `unknown` is required while Agent Finder returns
+ // no explicit eligibility field.
+ Eligibility CatalogTrustEligibility `json:"eligibility"`
+ // Bounded source and observation time for this snapshot. This is distinct from evidence
+ // used by the authority to calculate trust.
+ Provenance CatalogTrustProvenance `json:"provenance"`
+ // Discriminator: the authority explicitly revoked the assessment.
+ Status CatalogTrustSnapshotRevokedStatus `json:"status"`
+}
+
+func (CatalogTrustSnapshotRevoked) catalogTrustSnapshot() {}
+func (CatalogTrustSnapshotRevoked) SchemaVersion() CatalogTrustSnapshotSchemaVersion {
+ return CatalogTrustSnapshotSchemaVersionV1
+}
+
+// Discriminator: the authority explicitly marked the assessment stale.
+// Experimental: CatalogTrustSnapshotStale is part of an experimental API and may change or
+// be removed.
+type CatalogTrustSnapshotStale struct {
+ // Service-computed exposure eligibility. `unknown` is required while Agent Finder returns
+ // no explicit eligibility field.
+ Eligibility CatalogTrustEligibility `json:"eligibility"`
+ // Bounded source and observation time for this snapshot. This is distinct from evidence
+ // used by the authority to calculate trust.
+ Provenance CatalogTrustProvenance `json:"provenance"`
+ // Discriminator: the authority explicitly marked the assessment stale.
+ Status CatalogTrustSnapshotStaleStatus `json:"status"`
+}
+
+func (CatalogTrustSnapshotStale) catalogTrustSnapshot() {}
+func (CatalogTrustSnapshotStale) SchemaVersion() CatalogTrustSnapshotSchemaVersion {
+ return CatalogTrustSnapshotSchemaVersionV1
+}
+
+// Discriminator: the authority supplied a bounded trust value this runtime does not
+// understand.
+// Experimental: CatalogTrustSnapshotUnsupported is part of an experimental API and may
+// change or be removed.
+type CatalogTrustSnapshotUnsupported struct {
+ // Service-computed exposure eligibility. `unknown` is required while Agent Finder returns
+ // no explicit eligibility field.
+ Eligibility CatalogTrustEligibility `json:"eligibility"`
+ // Bounded source and observation time for this snapshot. This is distinct from evidence
+ // used by the authority to calculate trust.
+ Provenance CatalogTrustProvenance `json:"provenance"`
+ // Discriminator: the authority supplied a bounded trust value this runtime does not
+ // understand.
+ Status CatalogTrustSnapshotUnsupportedStatus `json:"status"`
+}
+
+func (CatalogTrustSnapshotUnsupported) catalogTrustSnapshot() {}
+func (CatalogTrustSnapshotUnsupported) SchemaVersion() CatalogTrustSnapshotSchemaVersion {
+ return CatalogTrustSnapshotSchemaVersionV1
+}
+
// Client-owned, case-sensitive string metadata persisted with a local session. Clients
// should namespace keys by owner. Keys must be non-empty and at most 256 UTF-8 bytes; keys
// under `copilot/` and `github/` are reserved. Values may contain at most 16 KiB of UTF-8
@@ -2264,7 +2446,7 @@ type CopilotUserResponse struct {
Login *string `json:"login,omitempty"`
// Per-category monthly quota allotments, keyed by quota category.
MonthlyQuotas map[string]float64 `json:"monthly_quotas,omitzero"`
- // Organizations the user belongs to, each with an optional login and display name.
+ // Organizations the user belongs to, each with an optional ID, login, and display name.
OrganizationList []CopilotUserResponseOrganizationListItem `json:"organization_list,omitzero"`
// Logins of the organizations the user belongs to.
OrganizationLoginList []string `json:"organization_login_list,omitzero"`
@@ -2303,6 +2485,8 @@ type CopilotUserResponseEndpoints struct {
}
type CopilotUserResponseOrganizationListItem struct {
+ // Numeric database ID of the organization.
+ ID *float64 `json:"id,omitempty"`
// GitHub login of the organization.
Login *string `json:"login,omitempty"`
// Display name of the organization.
@@ -2841,16 +3025,14 @@ type EventsReadResult struct {
// backward read this cursor pages toward OLDER events; keep passing `direction: backward`
// with it (the cursor is also self-describing, so backward paging continues correctly).
Cursor string `json:"cursor"`
- // Cursor status: 'ok' means the cursor was applied successfully; 'expired' means the cursor
- // referred to an event that no longer exists in history (e.g. truncated or compacted away)
- // and the read fell back to a boundary of the remaining history. For a forward read the
- // fallback starts from the beginning of the remaining history; for a backward read it falls
- // back to the tail (the newest window). Because the fallback page is a fresh boundary
- // snapshot rather than a continuation of the requested cursor, it may overlap events the
- // consumer has already rendered — a backward fallback to the tail in particular can repeat
- // the newest window. On 'expired', consumers should reset or rebase their local pagination
- // state (or deduplicate by event id) before continuing from the returned cursor rather than
- // blindly appending/prepending the fallback page.
+ // Cursor status: 'ok' means the cursor was applied successfully. For session.eventLog.read,
+ // 'expired' means the cursor referred to an event that no longer exists in active history
+ // and the read fell back to a boundary of the remaining history: the beginning for a
+ // forward read or the newest window for a backward read. That fallback may overlap already
+ // rendered events, so active-session consumers should reset, rebase, or deduplicate before
+ // continuing. sessions.readPersistedEvents has stricter snapshot semantics: 'expired'
+ // returns an empty terminal page and never switches to a replacement journal generation.
+ // Other persisted-read I/O failures are RPC errors with diagnostics, not cursor expiry.
CursorStatus EventsCursorStatus `json:"cursorStatus"`
// Session events for this batch, merged into a single stream in creation order: durable
// (persisted) events and ephemeral events interleave exactly as they were emitted. Set
@@ -2859,9 +3041,10 @@ type EventsReadResult struct {
// reading with a non-zero `waitMs`. For a backward (tail-first) read, the returned window
// contains persisted events only, still in chronological (oldest-to-newest) append order.
Events []SessionEvent `json:"events"`
- // True when more events are available in the read's direction. For a forward read, true
- // means the batch returned `max` events and more are available immediately. For a backward
- // read, true means older persisted events remain before the returned window.
+ // True when more events are available in the read's direction. For a backward read, true
+ // means older persisted events remain before the returned window. A persisted-event page
+ // may contain fewer than `max` events because of its byte budget while still reporting
+ // hasMore true; continue according to this flag rather than the event count.
HasMore bool `json:"hasMore"`
}
@@ -3965,12 +4148,24 @@ type FilterMappingEnumMap map[string]ContentFilterMode
func (FilterMappingEnumMap) filterMapping() {}
-// Optional user prompt to combine with the fleet orchestration instructions.
+// Parameters for starting fleet orchestration: an optional user prompt combined with the
+// fleet instructions, plus the send options forwarded to the resulting turn.
// Experimental: FleetStartRequest is part of an experimental API and may change or be
// removed.
type FleetStartRequest struct {
+ // Optional attachments (files, directories, selections, blobs, GitHub references) to
+ // include with the fleet request
+ Attachments []Attachment `json:"attachments,omitzero"`
+ // If false, this request will not trigger a Premium Request Unit charge. User requests
+ // default to billable.
+ // Internal: Billable is part of the SDK's internal API surface and is not intended for
+ // external use.
+ Billable *bool `json:"billable,omitempty"`
// Optional user prompt to combine with fleet instructions
Prompt *string `json:"prompt,omitempty"`
+ // If true, await completion of the agentic loop for this fleet request before returning.
+ // Defaults to false.
+ Wait *bool `json:"wait,omitempty"`
}
// Indicates whether fleet mode was successfully activated.
@@ -7226,6 +7421,9 @@ type ModelApplyStartupOverlayRequest struct {
// managed sources: it applies only when neither device nor server policy names a model, and
// an explicit user selection still wins.
PolicyHelperModel *string `json:"policyHelperModel,omitempty"`
+ // Auto routing preference selected by repository settings, when configured. Applied only
+ // when the overlay selects the Auto model; beside a concrete model it stays dormant.
+ RepoAutoTier *string `json:"repoAutoTier,omitempty"`
// Context tier selected by repository settings, when configured.
RepoContextTier *string `json:"repoContextTier,omitempty"`
// Model selected by repository settings, when configured.
@@ -7681,6 +7879,9 @@ type ModelWarningText struct {
type ModeSetRequest struct {
// Explicit response to a model-switch compaction preflight.
CompactionDecision *string `json:"compactionDecision,omitempty"`
+ // 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'.
+ ExpectedMode *SessionMode `json:"expectedMode,omitempty"`
// Session whose plan-mode base state should be inherited.
InheritPlanBaseFromSessionID *string `json:"inheritPlanBaseFromSessionId,omitempty"`
// The session mode the agent is operating in
@@ -7717,6 +7918,10 @@ type ModeSetResult struct {
DeprecationWarnings []string `json:"deprecationWarnings,omitzero"`
// User-facing outcome message for the model switch triggered by the mode change.
Message *string `json:"message,omitempty"`
+ // Whether the requested mode was applied to the session. False only when an 'expectedMode'
+ // precondition did not hold, in which case any model change reported alongside it was still
+ // applied.
+ ModeApplied *bool `json:"modeApplied,omitempty"`
// Whether applying the mode changed the active model.
ModelChanged bool `json:"modelChanged"`
// Lifecycle status of the requested mode change.
@@ -12539,6 +12744,9 @@ type SessionOpenOptions struct {
ReasoningEffort *string `json:"reasoningEffort,omitempty"`
// Initial reasoning summary mode for supported model clients.
ReasoningSummary *SessionOpenOptionsReasoningSummary `json:"reasoningSummary,omitempty"`
+ // Whether to invalidate cached custom-instruction discovery before constructing the
+ // session. Use when instruction files may have changed earlier in the same runtime process.
+ RefreshCustomInstructions *bool `json:"refreshCustomInstructions,omitempty"`
// Telemetry-only remote-defaulted flag.
RemoteDefaultedOn *bool `json:"remoteDefaultedOn,omitempty"`
// Telemetry-only remote exporting flag.
@@ -13483,12 +13691,17 @@ type SessionsPruneOldRequest struct {
// Experimental: SessionsReadPersistedEventsRequest is part of an experimental API and may
// change or be removed.
type SessionsReadPersistedEventsRequest struct {
- // Opaque cursor returned by a previous persisted-event read. Omit on the first call.
+ // Opaque, process-local, single-use cursor returned by the previous persisted-event read.
+ // Omit on the first call and issue continuations sequentially; reusing the same cursor
+ // returns an expired terminal page.
Cursor *string `json:"cursor,omitempty"`
// Direction to page through persisted history. Forward starts at the beginning; backward
- // starts with the newest events. Events in each page remain chronological.
+ // starts with the newest events. Events in each page remain chronological. This selects the
+ // initial read only; a continuation always uses the direction bound into its cursor.
Direction *EventsReadDirection `json:"direction,omitempty"`
- // Maximum number of events to return in this batch (1–1000, default 200).
+ // Maximum number of events to return in this batch (1–1000, default 200). Pages may contain
+ // fewer events to keep the serialized event array within a soft 1 MiB budget including
+ // resolved binary assets; one oversized event is returned alone to guarantee progress.
Max *int64 `json:"max,omitempty"`
// Session ID whose persisted event journal should be read.
SessionID string `json:"sessionId"`
@@ -16942,6 +17155,9 @@ const (
// Understands plans that enumerate every eligible transport rather than a single preferred
// one.
CatalogCapabilityMultipleTransportChoice CatalogCapability = "multiple-transport-choice"
+ // Understands versioned candidate trust snapshots. Protocol-3 callers must require this
+ // capability before the runtime adds the optional snapshot field.
+ CatalogCapabilityTrustSnapshot CatalogCapability = "trust-snapshot"
)
// Which wire-contract rule an upstream response broke
@@ -17128,6 +17344,125 @@ const (
CatalogSearchResultKindUnsupportedKind CatalogSearchResultKind = "unsupported-kind"
)
+// Authority-computed exposure eligibility, kept separate from tier. The current tier-only
+// Agent Finder response maps to `unknown`, never to a locally inferred eligibility.
+// Experimental: CatalogTrustEligibility is part of an experimental API and may change or be
+// removed.
+type CatalogTrustEligibility string
+
+const (
+ // Eligible for default catalogue exposure.
+ CatalogTrustEligibilityDefault CatalogTrustEligibility = "default"
+ // Eligible only when expanded or community results are requested.
+ CatalogTrustEligibilityExpanded CatalogTrustEligibility = "expanded"
+ // Not eligible for normal catalogue exposure.
+ CatalogTrustEligibilityHidden CatalogTrustEligibility = "hidden"
+ // The authority did not supply an eligibility decision.
+ CatalogTrustEligibilityUnknown CatalogTrustEligibility = "unknown"
+)
+
+// The authority omitted trust metadata.
+// Experimental: CatalogTrustSnapshotAbsentStatus is part of an experimental API and may
+// change or be removed.
+type CatalogTrustSnapshotAbsentStatus string
+
+const (
+ // The authority omitted trust metadata.
+ CatalogTrustSnapshotAbsentStatusAbsent CatalogTrustSnapshotAbsentStatus = "absent"
+)
+
+// A recognised T1 or T2 service tier was observed.
+// Experimental: CatalogTrustSnapshotCurrentStatus is part of an experimental API and may
+// change or be removed.
+type CatalogTrustSnapshotCurrentStatus string
+
+const (
+ // A recognised T1 or T2 service tier was observed.
+ CatalogTrustSnapshotCurrentStatusCurrent CatalogTrustSnapshotCurrentStatus = "current"
+)
+
+// The authority explicitly reported a downgraded assessment.
+// Experimental: CatalogTrustSnapshotDowngradedStatus is part of an experimental API and may
+// change or be removed.
+type CatalogTrustSnapshotDowngradedStatus string
+
+const (
+ // The authority explicitly reported a downgraded assessment.
+ CatalogTrustSnapshotDowngradedStatusDowngraded CatalogTrustSnapshotDowngradedStatus = "downgraded"
+)
+
+// The trust field was empty, unbounded, or had the wrong JSON type.
+// Experimental: CatalogTrustSnapshotMalformedStatus is part of an experimental API and may
+// change or be removed.
+type CatalogTrustSnapshotMalformedStatus string
+
+const (
+ // The trust field was empty, unbounded, or had the wrong JSON type.
+ CatalogTrustSnapshotMalformedStatusMalformed CatalogTrustSnapshotMalformedStatus = "malformed"
+)
+
+// The authority explicitly revoked its assessment.
+// Experimental: CatalogTrustSnapshotRevokedStatus is part of an experimental API and may
+// change or be removed.
+type CatalogTrustSnapshotRevokedStatus string
+
+const (
+ // The authority explicitly revoked its assessment.
+ CatalogTrustSnapshotRevokedStatusRevoked CatalogTrustSnapshotRevokedStatus = "revoked"
+)
+
+// SchemaVersion discriminator for CatalogTrustSnapshot.
+// Experimental: CatalogTrustSnapshotSchemaVersion is part of an experimental API and may
+// change or be removed.
+type CatalogTrustSnapshotSchemaVersion string
+
+const (
+ CatalogTrustSnapshotSchemaVersionV1 CatalogTrustSnapshotSchemaVersion = "v1"
+)
+
+// The authority explicitly marked its assessment stale.
+// Experimental: CatalogTrustSnapshotStaleStatus is part of an experimental API and may
+// change or be removed.
+type CatalogTrustSnapshotStaleStatus string
+
+const (
+ // The authority explicitly marked its assessment stale.
+ CatalogTrustSnapshotStaleStatusStale CatalogTrustSnapshotStaleStatus = "stale"
+)
+
+// The authority supplied a bounded trust value this runtime does not understand.
+// Experimental: CatalogTrustSnapshotUnsupportedStatus is part of an experimental API and
+// may change or be removed.
+type CatalogTrustSnapshotUnsupportedStatus string
+
+const (
+ // The authority supplied a bounded trust value this runtime does not understand.
+ CatalogTrustSnapshotUnsupportedStatusUnsupported CatalogTrustSnapshotUnsupportedStatus = "unsupported"
+)
+
+// Bounded authority that supplied a catalogue trust observation
+// Experimental: CatalogTrustSource is part of an experimental API and may change or be
+// removed.
+type CatalogTrustSource string
+
+const (
+ // GitHub Agent Finder supplied the trust field on its search result.
+ CatalogTrustSourceAgentFinder CatalogTrustSource = "agent-finder"
+)
+
+// Service-computed trust tier currently emitted by Agent Finder. It is independent of
+// search score, popularity, and client-side ranking.
+// Experimental: CatalogTrustTier is part of an experimental API and may change or be
+// removed.
+type CatalogTrustTier string
+
+const (
+ // Tier one as assigned by the catalogue authority.
+ CatalogTrustTierT1 CatalogTrustTier = "T1"
+ // Tier two as assigned by the catalogue authority.
+ CatalogTrustTierT2 CatalogTrustTier = "T2"
+)
+
// Why a catalog operation is not available on this runtime
// Experimental: CatalogUnavailableReason is part of an experimental API and may change or
// be removed.
@@ -17381,21 +17716,20 @@ const (
EventsAgentScopePrimary EventsAgentScope = "primary"
)
-// Cursor status: 'ok' means the cursor was applied successfully; 'expired' means the cursor
-// referred to an event that no longer exists in history (e.g. truncated or compacted away)
-// and the read fell back to a boundary of the remaining history (the beginning for a
-// forward read, the tail for a backward read). The fallback page is a fresh boundary
-// snapshot, not a continuation of the requested cursor, so it may overlap already-rendered
-// events; on 'expired' a consumer should reset/rebase its pagination state (or deduplicate
-// by event id) before continuing from the returned cursor.
+// Cursor status: 'ok' means the read succeeded against the requested history; 'expired'
+// means the requested continuation is unavailable. Recovery is endpoint-specific:
+// session.eventLog.read returns a boundary window of remaining active history that may
+// overlap prior pages, while sessions.readPersistedEvents returns an empty terminal page
+// and never switches journal generations. An expired persisted read is not successful
+// completion; a complete persisted snapshot requires cursorStatus 'ok' and hasMore false.
// Experimental: EventsCursorStatus is part of an experimental API and may change or be
// removed.
type EventsCursorStatus string
const (
- // The cursor referred to history that is no longer available.
+ // The requested continuation is unavailable; see the endpoint's recovery semantics.
EventsCursorStatusExpired EventsCursorStatus = "expired"
- // The cursor was applied successfully.
+ // The read succeeded against the requested history.
EventsCursorStatusOk EventsCursorStatus = "ok"
)
@@ -18764,6 +19098,10 @@ type PermissionDecisionSource string
const (
// The response followed the assisted-approval judge recommendation.
PermissionDecisionSourceAssistedApproval PermissionDecisionSource = "assisted_approval"
+ // A live authorization record from an earlier human decision in this session contained the
+ // proposal, so it ran without another prompt. This is not a new human decision and never
+ // mints authority of its own.
+ PermissionDecisionSourceAuthorizationCarryForward PermissionDecisionSource = "authorization_carry_forward"
// The host applied a standing policy or override rather than a judge recommendation or
// human decision.
PermissionDecisionSourceHostPolicy PermissionDecisionSource = "host_policy"
@@ -21546,10 +21884,30 @@ func (a *ServerSessionsAPI) PruneOld(ctx context.Context, params *SessionsPruneO
}
// ReadPersistedEvents reads a page of durable events directly from a local session's
-// persisted journal without creating, resuming, or activating the session. The initial
-// backward read uses a bounded tail scan for fast first paint; cursor continuations
-// preserve the session event-log paging semantics. Persisted events may omit payloads that
-// are reconstructed only for an active session.
+// persisted journal without creating, resuming, or activating the session. The first read
+// pins the currently opened journal generation and its byte-length boundary; opaque cursor
+// continuations remain on that generation across runtime-owned compaction, truncation, and
+// rewrite operations, which replace the live path atomically, and events appended after the
+// boundary are excluded. For cold hydration, await the first successful page before
+// activation and establish lossless live-event buffering before resume; merge subsequent
+// live events by ID, preserving persisted order and letting live payloads win.
+// Continuations are process-local, single-use capabilities bound to the originating session
+// and storage context and must be paged sequentially; concurrent or repeated use of the
+// same cursor expires that duplicate read rather than reading the generation twice. A
+// complete snapshot has cursorStatus 'ok' and hasMore false. Snapshots expire after five
+// idle minutes, with at most eight retained per process and idle-only eviction under
+// pressure; completion and cancelled-worker exit release their handles. No transcript copy
+// is created, but retained handles may keep replaced files' disk blocks alive until
+// release. Pages have a soft 1 MiB serialized event-array budget including resolved binary
+// assets; one oversized event is returned alone to guarantee progress. Working memory also
+// includes a record/lookahead and asset resolution; resolving the first binary reference
+// may scan the full pinned generation to build a bounded offset index. If the snapshot
+// expires, is evicted, is cancelled before a continuation is established, or becomes
+// unreadable after an observable unsupported in-place shortening, the continuation returns
+// cursorStatus 'expired' with an empty terminal page and never falls back to a different
+// generation. A missing or initially unreadable journal is an RPC error. Persisted history
+// excludes ephemeral events and may omit payloads that are reconstructed only for an active
+// session; use the active session event stream for post-resume live events.
//
// RPC method: sessions.readPersistedEvents.
//
@@ -23410,15 +23768,25 @@ type FleetAPI sessionAPI
//
// RPC method: session.fleet.start.
//
-// Parameters: Optional user prompt to combine with the fleet orchestration instructions.
+// Parameters: Parameters for starting fleet orchestration: an optional user prompt combined
+// with the fleet instructions, plus the send options forwarded to the resulting turn.
//
// Returns: Indicates whether fleet mode was successfully activated.
func (a *FleetAPI) Start(ctx context.Context, params *FleetStartRequest) (*FleetStartResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
+ if params.Attachments != nil {
+ req["attachments"] = params.Attachments
+ }
+ if params.Billable != nil {
+ req["billable"] = *params.Billable
+ }
if params.Prompt != nil {
req["prompt"] = *params.Prompt
}
+ if params.Wait != nil {
+ req["wait"] = *params.Wait
+ }
}
raw, err := a.client.Request(ctx, "session.fleet.start", req)
if err != nil {
@@ -24897,6 +25265,9 @@ func (a *ModeAPI) Set(ctx context.Context, params *ModeSetRequest) (*ModeSetResu
if params.CompactionDecision != nil {
req["compactionDecision"] = *params.CompactionDecision
}
+ if params.ExpectedMode != nil {
+ req["expectedMode"] = *params.ExpectedMode
+ }
if params.InheritPlanBaseFromSessionID != nil {
req["inheritPlanBaseFromSessionId"] = *params.InheritPlanBaseFromSessionID
}
@@ -29039,6 +29410,9 @@ func (a *InternalModelAPI) ApplyStartupOverlay(ctx context.Context, params *Mode
if params.PolicyHelperModel != nil {
req["policyHelperModel"] = *params.PolicyHelperModel
}
+ if params.RepoAutoTier != nil {
+ req["repoAutoTier"] = *params.RepoAutoTier
+ }
if params.RepoContextTier != nil {
req["repoContextTier"] = *params.RepoContextTier
}
diff --git a/go/rpc/zrpc_encoding.go b/go/rpc/zrpc_encoding.go
index 0b95171d79..0c731c63fe 100644
--- a/go/rpc/zrpc_encoding.go
+++ b/go/rpc/zrpc_encoding.go
@@ -775,6 +775,336 @@ func (r CatalogCandidateSourceURL) MarshalJSON() ([]byte, error) {
})
}
+func matchesCatalogTrustSnapshotAbsent(data []byte) bool {
+ var rawGroup0 struct {
+ Status json.RawMessage `json:"status"`
+ Tier json.RawMessage `json:"tier"`
+ }
+ if err := json.Unmarshal(data, &rawGroup0); err != nil {
+ return false
+ }
+ if rawGroup0.Status == nil {
+ return false
+ }
+ var rawGroup0String string
+ if err := json.Unmarshal(rawGroup0.Status, &rawGroup0String); err != nil {
+ return false
+ }
+ switch rawGroup0String {
+ case "absent":
+ default:
+ return false
+ }
+ return rawGroup0.Tier == nil
+}
+
+func matchesCatalogTrustSnapshotCurrent(data []byte) bool {
+ var rawGroup0 struct {
+ Status json.RawMessage `json:"status"`
+ Tier json.RawMessage `json:"tier"`
+ }
+ if err := json.Unmarshal(data, &rawGroup0); err != nil {
+ return false
+ }
+ if rawGroup0.Status == nil {
+ return false
+ }
+ var rawGroup0String string
+ if err := json.Unmarshal(rawGroup0.Status, &rawGroup0String); err != nil {
+ return false
+ }
+ switch rawGroup0String {
+ case "current":
+ default:
+ return false
+ }
+ if rawGroup0.Tier == nil {
+ return false
+ }
+ var rawGroup0String string
+ if err := json.Unmarshal(rawGroup0.Tier, &rawGroup0String); err != nil {
+ return false
+ }
+ switch rawGroup0String {
+ case "T1", "T2":
+ default:
+ return false
+ }
+ return true
+}
+
+func matchesCatalogTrustSnapshotDowngraded(data []byte) bool {
+ var rawGroup0 struct {
+ Status json.RawMessage `json:"status"`
+ Tier json.RawMessage `json:"tier"`
+ }
+ if err := json.Unmarshal(data, &rawGroup0); err != nil {
+ return false
+ }
+ if rawGroup0.Status == nil {
+ return false
+ }
+ var rawGroup0String string
+ if err := json.Unmarshal(rawGroup0.Status, &rawGroup0String); err != nil {
+ return false
+ }
+ switch rawGroup0String {
+ case "downgraded":
+ default:
+ return false
+ }
+ return rawGroup0.Tier == nil
+}
+
+func matchesCatalogTrustSnapshotMalformed(data []byte) bool {
+ var rawGroup0 struct {
+ Status json.RawMessage `json:"status"`
+ Tier json.RawMessage `json:"tier"`
+ }
+ if err := json.Unmarshal(data, &rawGroup0); err != nil {
+ return false
+ }
+ if rawGroup0.Status == nil {
+ return false
+ }
+ var rawGroup0String string
+ if err := json.Unmarshal(rawGroup0.Status, &rawGroup0String); err != nil {
+ return false
+ }
+ switch rawGroup0String {
+ case "malformed":
+ default:
+ return false
+ }
+ return rawGroup0.Tier == nil
+}
+
+func matchesCatalogTrustSnapshotRevoked(data []byte) bool {
+ var rawGroup0 struct {
+ Status json.RawMessage `json:"status"`
+ Tier json.RawMessage `json:"tier"`
+ }
+ if err := json.Unmarshal(data, &rawGroup0); err != nil {
+ return false
+ }
+ if rawGroup0.Status == nil {
+ return false
+ }
+ var rawGroup0String string
+ if err := json.Unmarshal(rawGroup0.Status, &rawGroup0String); err != nil {
+ return false
+ }
+ switch rawGroup0String {
+ case "revoked":
+ default:
+ return false
+ }
+ return rawGroup0.Tier == nil
+}
+
+func matchesCatalogTrustSnapshotStale(data []byte) bool {
+ var rawGroup0 struct {
+ Status json.RawMessage `json:"status"`
+ Tier json.RawMessage `json:"tier"`
+ }
+ if err := json.Unmarshal(data, &rawGroup0); err != nil {
+ return false
+ }
+ if rawGroup0.Status == nil {
+ return false
+ }
+ var rawGroup0String string
+ if err := json.Unmarshal(rawGroup0.Status, &rawGroup0String); err != nil {
+ return false
+ }
+ switch rawGroup0String {
+ case "stale":
+ default:
+ return false
+ }
+ return rawGroup0.Tier == nil
+}
+
+func matchesCatalogTrustSnapshotUnsupported(data []byte) bool {
+ var rawGroup0 struct {
+ Status json.RawMessage `json:"status"`
+ Tier json.RawMessage `json:"tier"`
+ }
+ if err := json.Unmarshal(data, &rawGroup0); err != nil {
+ return false
+ }
+ if rawGroup0.Status == nil {
+ return false
+ }
+ var rawGroup0String string
+ if err := json.Unmarshal(rawGroup0.Status, &rawGroup0String); err != nil {
+ return false
+ }
+ switch rawGroup0String {
+ case "unsupported":
+ default:
+ return false
+ }
+ return rawGroup0.Tier == nil
+}
+
+func unmarshalCatalogTrustSnapshot(data []byte) (CatalogTrustSnapshot, error) {
+ if string(data) == "null" {
+ return nil, nil
+ }
+ type rawUnion struct {
+ SchemaVersion CatalogTrustSnapshotSchemaVersion `json:"schemaVersion"`
+ }
+ var raw rawUnion
+ if err := json.Unmarshal(data, &raw); err != nil {
+ return nil, err
+ }
+
+ switch raw.SchemaVersion {
+ case CatalogTrustSnapshotSchemaVersionV1:
+ if matchesCatalogTrustSnapshotAbsent(data) {
+ var d CatalogTrustSnapshotAbsent
+ if err := json.Unmarshal(data, &d); err != nil {
+ return nil, err
+ }
+ return &d, nil
+ }
+ if matchesCatalogTrustSnapshotCurrent(data) {
+ var d CatalogTrustSnapshotCurrent
+ if err := json.Unmarshal(data, &d); err != nil {
+ return nil, err
+ }
+ return &d, nil
+ }
+ if matchesCatalogTrustSnapshotDowngraded(data) {
+ var d CatalogTrustSnapshotDowngraded
+ if err := json.Unmarshal(data, &d); err != nil {
+ return nil, err
+ }
+ return &d, nil
+ }
+ if matchesCatalogTrustSnapshotMalformed(data) {
+ var d CatalogTrustSnapshotMalformed
+ if err := json.Unmarshal(data, &d); err != nil {
+ return nil, err
+ }
+ return &d, nil
+ }
+ if matchesCatalogTrustSnapshotRevoked(data) {
+ var d CatalogTrustSnapshotRevoked
+ if err := json.Unmarshal(data, &d); err != nil {
+ return nil, err
+ }
+ return &d, nil
+ }
+ if matchesCatalogTrustSnapshotStale(data) {
+ var d CatalogTrustSnapshotStale
+ if err := json.Unmarshal(data, &d); err != nil {
+ return nil, err
+ }
+ return &d, nil
+ }
+ if matchesCatalogTrustSnapshotUnsupported(data) {
+ var d CatalogTrustSnapshotUnsupported
+ if err := json.Unmarshal(data, &d); err != nil {
+ return nil, err
+ }
+ return &d, nil
+ }
+ return &RawCatalogTrustSnapshotData{Discriminator: raw.SchemaVersion, Raw: data}, nil
+ default:
+ return &RawCatalogTrustSnapshotData{Discriminator: raw.SchemaVersion, Raw: data}, nil
+ }
+}
+
+func (r RawCatalogTrustSnapshotData) MarshalJSON() ([]byte, error) {
+ if r.Raw != nil {
+ return r.Raw, nil
+ }
+ return json.Marshal(struct {
+ SchemaVersion CatalogTrustSnapshotSchemaVersion `json:"schemaVersion"`
+ }{
+ SchemaVersion: r.Discriminator,
+ })
+}
+
+func (r CatalogTrustSnapshotAbsent) MarshalJSON() ([]byte, error) {
+ type alias CatalogTrustSnapshotAbsent
+ return json.Marshal(struct {
+ SchemaVersion CatalogTrustSnapshotSchemaVersion `json:"schemaVersion"`
+ alias
+ }{
+ SchemaVersion: r.SchemaVersion(),
+ alias: alias(r),
+ })
+}
+
+func (r CatalogTrustSnapshotCurrent) MarshalJSON() ([]byte, error) {
+ type alias CatalogTrustSnapshotCurrent
+ return json.Marshal(struct {
+ SchemaVersion CatalogTrustSnapshotSchemaVersion `json:"schemaVersion"`
+ alias
+ }{
+ SchemaVersion: r.SchemaVersion(),
+ alias: alias(r),
+ })
+}
+
+func (r CatalogTrustSnapshotDowngraded) MarshalJSON() ([]byte, error) {
+ type alias CatalogTrustSnapshotDowngraded
+ return json.Marshal(struct {
+ SchemaVersion CatalogTrustSnapshotSchemaVersion `json:"schemaVersion"`
+ alias
+ }{
+ SchemaVersion: r.SchemaVersion(),
+ alias: alias(r),
+ })
+}
+
+func (r CatalogTrustSnapshotMalformed) MarshalJSON() ([]byte, error) {
+ type alias CatalogTrustSnapshotMalformed
+ return json.Marshal(struct {
+ SchemaVersion CatalogTrustSnapshotSchemaVersion `json:"schemaVersion"`
+ alias
+ }{
+ SchemaVersion: r.SchemaVersion(),
+ alias: alias(r),
+ })
+}
+
+func (r CatalogTrustSnapshotRevoked) MarshalJSON() ([]byte, error) {
+ type alias CatalogTrustSnapshotRevoked
+ return json.Marshal(struct {
+ SchemaVersion CatalogTrustSnapshotSchemaVersion `json:"schemaVersion"`
+ alias
+ }{
+ SchemaVersion: r.SchemaVersion(),
+ alias: alias(r),
+ })
+}
+
+func (r CatalogTrustSnapshotStale) MarshalJSON() ([]byte, error) {
+ type alias CatalogTrustSnapshotStale
+ return json.Marshal(struct {
+ SchemaVersion CatalogTrustSnapshotSchemaVersion `json:"schemaVersion"`
+ alias
+ }{
+ SchemaVersion: r.SchemaVersion(),
+ alias: alias(r),
+ })
+}
+
+func (r CatalogTrustSnapshotUnsupported) MarshalJSON() ([]byte, error) {
+ type alias CatalogTrustSnapshotUnsupported
+ return json.Marshal(struct {
+ SchemaVersion CatalogTrustSnapshotSchemaVersion `json:"schemaVersion"`
+ alias
+ }{
+ SchemaVersion: r.SchemaVersion(),
+ alias: alias(r),
+ })
+}
+
func (r *CatalogAiSkillCandidate) UnmarshalJSON(data []byte) error {
type rawCatalogAiSkillCandidate struct {
Description *string `json:"description,omitempty"`
@@ -786,6 +1116,7 @@ func (r *CatalogAiSkillCandidate) UnmarshalJSON(data []byte) error {
Provenance CatalogAiSkillCandidateProvenance `json:"provenance"`
Publisher *string `json:"publisher,omitempty"`
Source json.RawMessage `json:"source"`
+ Trust json.RawMessage `json:"trust,omitempty"`
}
var raw rawCatalogAiSkillCandidate
if err := json.Unmarshal(data, &raw); err != nil {
@@ -806,6 +1137,13 @@ func (r *CatalogAiSkillCandidate) UnmarshalJSON(data []byte) error {
}
r.Source = value
}
+ if raw.Trust != nil {
+ value, err := unmarshalCatalogTrustSnapshot(raw.Trust)
+ if err != nil {
+ return err
+ }
+ r.Trust = value
+ }
return nil
}
@@ -831,6 +1169,7 @@ func (r *CatalogMCPServerCandidate) UnmarshalJSON(data []byte) error {
Provenance CatalogMCPServerCandidateProvenance `json:"provenance"`
Publisher *string `json:"publisher,omitempty"`
Source json.RawMessage `json:"source"`
+ Trust json.RawMessage `json:"trust,omitempty"`
}
var raw rawCatalogMCPServerCandidate
if err := json.Unmarshal(data, &raw); err != nil {
@@ -851,6 +1190,13 @@ func (r *CatalogMCPServerCandidate) UnmarshalJSON(data []byte) error {
}
r.Source = value
}
+ if raw.Trust != nil {
+ value, err := unmarshalCatalogTrustSnapshot(raw.Trust)
+ if err != nil {
+ return err
+ }
+ r.Trust = value
+ }
return nil
}
@@ -1843,6 +2189,33 @@ func unmarshalFilterMapping(data []byte) (FilterMapping, error) {
return nil, errors.New("data did not match any union variant for FilterMapping")
}
+func (r *FleetStartRequest) UnmarshalJSON(data []byte) error {
+ type rawFleetStartRequest struct {
+ Attachments []json.RawMessage `json:"attachments,omitzero"`
+ Billable *bool `json:"billable,omitempty"`
+ Prompt *string `json:"prompt,omitempty"`
+ Wait *bool `json:"wait,omitempty"`
+ }
+ var raw rawFleetStartRequest
+ if err := json.Unmarshal(data, &raw); err != nil {
+ return err
+ }
+ if raw.Attachments != nil {
+ r.Attachments = make([]Attachment, 0, len(raw.Attachments))
+ for _, rawItem := range raw.Attachments {
+ value, err := unmarshalAttachment(rawItem)
+ if err != nil {
+ return err
+ }
+ r.Attachments = append(r.Attachments, value)
+ }
+ }
+ r.Billable = raw.Billable
+ r.Prompt = raw.Prompt
+ r.Wait = raw.Wait
+ return nil
+}
+
func unmarshalGitHubTokenAcquireResult(data []byte) (GitHubTokenAcquireResult, error) {
if string(data) == "null" {
return nil, nil
@@ -5509,6 +5882,7 @@ func (r *SessionOpenOptions) UnmarshalJSON(data []byte) error {
Providers []NamedProviderConfig `json:"providers,omitzero"`
ReasoningEffort *string `json:"reasoningEffort,omitempty"`
ReasoningSummary *SessionOpenOptionsReasoningSummary `json:"reasoningSummary,omitempty"`
+ RefreshCustomInstructions *bool `json:"refreshCustomInstructions,omitempty"`
RemoteDefaultedOn *bool `json:"remoteDefaultedOn,omitempty"`
RemoteExporting *bool `json:"remoteExporting,omitempty"`
RemoteSteerable *bool `json:"remoteSteerable,omitempty"`
@@ -5592,6 +5966,7 @@ func (r *SessionOpenOptions) UnmarshalJSON(data []byte) error {
r.Providers = raw.Providers
r.ReasoningEffort = raw.ReasoningEffort
r.ReasoningSummary = raw.ReasoningSummary
+ r.RefreshCustomInstructions = raw.RefreshCustomInstructions
r.RemoteDefaultedOn = raw.RemoteDefaultedOn
r.RemoteExporting = raw.RemoteExporting
r.RemoteSteerable = raw.RemoteSteerable
diff --git a/go/rpc/zsession_encoding.go b/go/rpc/zsession_encoding.go
index db4db7f740..b3e2f607b4 100644
--- a/go/rpc/zsession_encoding.go
+++ b/go/rpc/zsession_encoding.go
@@ -341,12 +341,36 @@ func (e *SessionEvent) UnmarshalJSON(data []byte) error {
return err
}
e.Data = &d
+ case SessionEventTypePermissionCarriedForward:
+ var d PermissionCarriedForwardData
+ if err := json.Unmarshal(raw.Data, &d); err != nil {
+ return err
+ }
+ e.Data = &d
case SessionEventTypePermissionCompleted:
var d PermissionCompletedData
if err := json.Unmarshal(raw.Data, &d); err != nil {
return err
}
e.Data = &d
+ case SessionEventTypePermissionMessageAuthorization:
+ var d PermissionMessageAuthorizationData
+ if err := json.Unmarshal(raw.Data, &d); err != nil {
+ return err
+ }
+ e.Data = &d
+ case SessionEventTypePermissionMessageAuthorizationDegraded:
+ var d PermissionMessageAuthorizationDegradedData
+ if err := json.Unmarshal(raw.Data, &d); err != nil {
+ return err
+ }
+ e.Data = &d
+ case SessionEventTypePermissionMessageAuthorizationRead:
+ var d PermissionMessageAuthorizationReadData
+ if err := json.Unmarshal(raw.Data, &d); err != nil {
+ return err
+ }
+ e.Data = &d
case SessionEventTypePermissionRequested:
var d PermissionRequestedData
if err := json.Unmarshal(raw.Data, &d); err != nil {
@@ -2498,14 +2522,16 @@ func (r PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser) MarshalJSON()
func (r *PermissionCompletedData) UnmarshalJSON(data []byte) error {
type rawPermissionCompletedData struct {
- RequestID string `json:"requestId"`
- Result json.RawMessage `json:"result"`
- ToolCallID *string `json:"toolCallId,omitempty"`
+ DecisionSource *PermissionDecisionSource `json:"decisionSource,omitempty"`
+ RequestID string `json:"requestId"`
+ Result json.RawMessage `json:"result"`
+ ToolCallID *string `json:"toolCallId,omitempty"`
}
var raw rawPermissionCompletedData
if err := json.Unmarshal(data, &raw); err != nil {
return err
}
+ r.DecisionSource = raw.DecisionSource
r.RequestID = raw.RequestID
if raw.Result != nil {
value, err := unmarshalPermissionResult(raw.Result)
diff --git a/go/rpc/zsession_events.go b/go/rpc/zsession_events.go
index f355637137..a4ccde9aaf 100644
--- a/go/rpc/zsession_events.go
+++ b/go/rpc/zsession_events.go
@@ -118,12 +118,24 @@ const (
SessionEventTypeModelCallFinished SessionEventType = "model.call_finished"
SessionEventTypeModelCallStart SessionEventType = "model.call_start"
SessionEventTypePendingMessagesModified SessionEventType = "pending_messages.modified"
- SessionEventTypePermissionCompleted SessionEventType = "permission.completed"
- SessionEventTypePermissionRequested SessionEventType = "permission.requested"
- SessionEventTypePromptCacheBreak SessionEventType = "prompt_cache_break"
- SessionEventTypeSamplingCompleted SessionEventType = "sampling.completed"
- SessionEventTypeSamplingRequested SessionEventType = "sampling.requested"
- SessionEventTypeSandboxDecision SessionEventType = "sandbox.decision"
+ // Experimental: SessionEventTypePermissionCarriedForward identifies an experimental event
+ // that may change or be removed.
+ SessionEventTypePermissionCarriedForward SessionEventType = "permission.carriedForward"
+ SessionEventTypePermissionCompleted SessionEventType = "permission.completed"
+ // Experimental: SessionEventTypePermissionMessageAuthorization identifies an experimental
+ // event that may change or be removed.
+ SessionEventTypePermissionMessageAuthorization SessionEventType = "permission.messageAuthorization"
+ // Experimental: SessionEventTypePermissionMessageAuthorizationDegraded identifies an
+ // experimental event that may change or be removed.
+ SessionEventTypePermissionMessageAuthorizationDegraded SessionEventType = "permission.messageAuthorizationDegraded"
+ // Experimental: SessionEventTypePermissionMessageAuthorizationRead identifies an
+ // experimental event that may change or be removed.
+ SessionEventTypePermissionMessageAuthorizationRead SessionEventType = "permission.messageAuthorizationRead"
+ SessionEventTypePermissionRequested SessionEventType = "permission.requested"
+ SessionEventTypePromptCacheBreak SessionEventType = "prompt_cache_break"
+ SessionEventTypeSamplingCompleted SessionEventType = "sampling.completed"
+ SessionEventTypeSamplingRequested SessionEventType = "sampling.requested"
+ SessionEventTypeSandboxDecision SessionEventType = "sandbox.decision"
// Experimental: SessionEventTypeSessionAutoModeResolved identifies an experimental event
// that may change or be removed.
SessionEventTypeSessionAutoModeResolved SessionEventType = "session.auto_mode_resolved"
@@ -1325,6 +1337,43 @@ type ModelCallFinishedData struct {
func (*ModelCallFinishedData) sessionEventData() {}
func (*ModelCallFinishedData) Type() SessionEventType { return SessionEventTypeModelCallFinished }
+// Freezes one blinded, verbatim-verified authorization claim the runtime minted from a human user message, so a resumed session re-establishes the same grant deterministically instead of re-running the extraction model. This mints no authority on its own: it records what a blinded proposer pointed at and the trusted discriminator the runtime established, and deterministic establishment runs on replay. Persisted so recorded authority survives compaction and process resume.
+// Experimental: PermissionMessageAuthorizationData is part of an experimental API and may change or be removed.
+type PermissionMessageAuthorizationData struct {
+ // The kind of effect authorized, as an action-class identifier.
+ // Experimental: ActionClass is part of an experimental API and may change or be removed.
+ ActionClass string `json:"actionClass"`
+ // Whether the claim granted or denied authority.
+ // Experimental: Polarity is part of an experimental API and may change or be removed.
+ Polarity PermissionMessageAuthorizationPolarity `json:"polarity"`
+ // Deterministic identity of the record, derived from the turn and span offsets so re-extracting the same span mints nothing new.
+ // Experimental: RecordID is part of an experimental API and may change or be removed.
+ RecordID string `json:"recordId"`
+ // End byte offset of the authorizing span within the turn.
+ // Experimental: SpanEnd is part of an experimental API and may change or be removed.
+ SpanEnd int64 `json:"spanEnd"`
+ // Start byte offset of the authorizing span within the turn.
+ // Experimental: SpanStart is part of an experimental API and may change or be removed.
+ SpanStart int64 `json:"spanStart"`
+ // Concrete named targets that appear verbatim inside the span.
+ // Experimental: TargetMembers is part of an experimental API and may change or be removed.
+ TargetMembers []string `json:"targetMembers,omitzero"`
+ // The task the permission is scoped to, when the human named one.
+ // Experimental: Task is part of an experimental API and may change or be removed.
+ Task *string `json:"task,omitempty"`
+ // The human turn the quoted span was read from.
+ // Experimental: TurnIndex is part of an experimental API and may change or be removed.
+ TurnIndex int64 `json:"turnIndex"`
+ // The trusted version discriminator, when one exists. Exact shell-command grants carry the byte-identical commands grounded in the human span; world-derived classes carry a file object, remote tip, or runner only when that state was captured safely. An opaque object mirroring the runtime's adjacently-tagged resolution.
+ // Experimental: World is part of an experimental API and may change or be removed.
+ World any `json:"world,omitempty"`
+}
+
+func (*PermissionMessageAuthorizationData) sessionEventData() {}
+func (*PermissionMessageAuthorizationData) Type() SessionEventType {
+ return SessionEventTypePermissionMessageAuthorization
+}
+
// Hook invocation completion details including output, success status, and error information
type HookEndData struct {
// Error details when the hook failed
@@ -1965,6 +2014,9 @@ func (*UserMessageData) Type() SessionEventType { return SessionEventTypeUserMes
// Permission request completion notification signaling UI dismissal
type PermissionCompletedData struct {
+ // Who decided this permission request. Absent on completions recorded before this field existed, which consumers must treat as "not a human decision" rather than assuming one. Authorization records are minted only for `human_response`; an assisted-approval verdict, a host policy, an unattended fallback, and a hook resolution all produce the same `result` a person does, so this is the only field that distinguishes them.
+ // Experimental: DecisionSource is part of an experimental API and may change or be removed.
+ DecisionSource *PermissionDecisionSource `json:"decisionSource,omitempty"`
// Request ID of the resolved permission request; clients should dismiss any UI for this request
RequestID string `json:"requestId"`
// The result of the permission request
@@ -2094,6 +2146,28 @@ type CommandQueuedData struct {
func (*CommandQueuedData) sessionEventData() {}
func (*CommandQueuedData) Type() SessionEventType { return SessionEventTypeCommandQueued }
+// Records that a live authorization record from an earlier human decision in this session contained a permission proposal, so it ran without another prompt. This mints no authority: it accounts for one more effect against the prior grant, which is what lets a replayed session agree with the live one about how much of that grant is left.
+// Experimental: PermissionCarriedForwardData is part of an experimental API and may change or be removed.
+type PermissionCarriedForwardData struct {
+ // Always `authorization_carry_forward`. Stated explicitly so a consumer reading this event cannot mistake it for a human, host-policy, or assisted-approval decision.
+ // Experimental: DecisionSource is part of an experimental API and may change or be removed.
+ DecisionSource PermissionDecisionSource `json:"decisionSource"`
+ // Identity of the prior authorization record that contained the proposal.
+ // Experimental: RecordID is part of an experimental API and may change or be removed.
+ RecordID string `json:"recordId"`
+ // Authorization edge minted for this admission. Not a prompt id: no prompt was raised, so no client should expect a request with this id.
+ // Experimental: RequestID is part of an experimental API and may change or be removed.
+ RequestID string `json:"requestId"`
+ // Tool call this admission authorizes. Its execution receipts the prior grant, which is how a single-effect approval is spent rather than carried forward again.
+ // Experimental: ToolCallID is part of an experimental API and may change or be removed.
+ ToolCallID string `json:"toolCallId"`
+}
+
+func (*PermissionCarriedForwardData) sessionEventData() {}
+func (*PermissionCarriedForwardData) Type() SessionEventType {
+ return SessionEventTypePermissionCarriedForward
+}
+
// Records that a mode transition notice reached the model so cache-stable mode tools can remain offered across resume.
type SessionModeNoticeDeliveredData struct {
// Model-visible transition notice persisted for a mid-turn delivery
@@ -2107,6 +2181,32 @@ func (*SessionModeNoticeDeliveredData) Type() SessionEventType {
return SessionEventTypeSessionModeNoticeDelivered
}
+// Records that message-backed authorization could not safely represent one human turn before compaction. The runtime may compact the original message after this marker is durable, but message-derived carry-forward and assisted auto-approval remain disabled for the rest of the session so subsequent commands continue through the ordinary permission prompt.
+// Experimental: PermissionMessageAuthorizationDegradedData is part of an experimental API and may change or be removed.
+type PermissionMessageAuthorizationDegradedData struct {
+ // The human turn that could not be represented safely.
+ // Experimental: TurnIndex is part of an experimental API and may change or be removed.
+ TurnIndex int64 `json:"turnIndex"`
+}
+
+func (*PermissionMessageAuthorizationDegradedData) sessionEventData() {}
+func (*PermissionMessageAuthorizationDegradedData) Type() SessionEventType {
+ return SessionEventTypePermissionMessageAuthorizationDegraded
+}
+
+// Records that one human turn has been read by the blinded authorization proposer, whether or not it minted anything, so a resumed session does not re-run the extraction model on a turn the live session already read. Persisted purely to avoid wasted model calls across resume; it is never a correctness mechanism.
+// Experimental: PermissionMessageAuthorizationReadData is part of an experimental API and may change or be removed.
+type PermissionMessageAuthorizationReadData struct {
+ // The human turn that was read by the proposer.
+ // Experimental: TurnIndex is part of an experimental API and may change or be removed.
+ TurnIndex int64 `json:"turnIndex"`
+}
+
+func (*PermissionMessageAuthorizationReadData) sessionEventData() {}
+func (*PermissionMessageAuthorizationReadData) Type() SessionEventType {
+ return SessionEventTypePermissionMessageAuthorizationRead
+}
+
// Registered command dispatch request routed to the owning client
type CommandExecuteData struct {
// Raw argument string after the command name
@@ -2776,6 +2876,8 @@ type ToolExecutionStartData struct {
MCPServerName *string `json:"mcpServerName,omitempty"`
// Original tool name on the MCP server, when the tool is an MCP tool
MCPToolName *string `json:"mcpToolName,omitempty"`
+ // Transport the MCP server hosting this tool is connected over, when the tool is an MCP tool and the server is configured
+ MCPTransport *MCPServerTransport `json:"mcpTransport,omitempty"`
// Model identifier that generated this tool call
Model *string `json:"model,omitempty"`
// Tool call ID of the parent tool invocation when this event originates from a sub-agent
@@ -3854,6 +3956,9 @@ type PermissionPromptRequestRead struct {
ManagedApprovalRequired *bool `json:"managedApprovalRequired,omitempty"`
// Path of the file or directory being read
Path string `json:"path"`
+ // Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display path.
+ // Experimental: ResolvedPath is part of an experimental API and may change or be removed.
+ ResolvedPath *string `json:"resolvedPath,omitempty"`
// Tool call ID that triggered this permission request
ToolCallID *string `json:"toolCallId,omitempty"`
}
@@ -3906,6 +4011,9 @@ type PermissionPromptRequestWrite struct {
ManagedApprovalRequired *bool `json:"managedApprovalRequired,omitempty"`
// Complete new file contents for newly created files
NewFileContents *string `json:"newFileContents,omitempty"`
+ // Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display fileName.
+ // Experimental: ResolvedPath is part of an experimental API and may change or be removed.
+ ResolvedPath *string `json:"resolvedPath,omitempty"`
// Tool call ID that triggered this permission request
ToolCallID *string `json:"toolCallId,omitempty"`
}
@@ -4134,6 +4242,9 @@ type PermissionRequestRead struct {
RequestSandboxBypass *bool `json:"requestSandboxBypass,omitempty"`
// What the tool tells the user about the bypass on offer: which policy rule blocked the call, or why it cannot be sandboxed. Only meaningful when requestSandboxBypass is true.
RequestSandboxBypassReason *string `json:"requestSandboxBypassReason,omitempty"`
+ // Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display path.
+ // Experimental: ResolvedPath is part of an experimental API and may change or be removed.
+ ResolvedPath *string `json:"resolvedPath,omitempty"`
// Tool call ID that triggered this permission request
ToolCallID *string `json:"toolCallId,omitempty"`
}
@@ -4169,6 +4280,12 @@ type PermissionRequestShell struct {
RequestSandboxBypassReason *string `json:"requestSandboxBypassReason,omitempty"`
// True when the requested escalation is a permissive retry rather than a full bypass: the command re-runs inside the sandbox with its file and process restrictions recording instead of blocking, while the network policy stays enforced. Always accompanied by requestSandboxBypass, so hosts that do not recognize this field still treat the request as the escalation it is. Hosts that do recognize it must not describe the command as running outside the sandbox, which would overstate the privilege being granted.
RequestSandboxPermissive *bool `json:"requestSandboxPermissive,omitempty"`
+ // Runtime-resolved canonical object each possiblePaths entry names, keyed by the requested spelling, used for authorization identity checks. Internal and experimental; clients should continue to display possiblePaths.
+ // Experimental: ResolvedPaths is part of an experimental API and may change or be removed.
+ ResolvedPaths map[string]string `json:"resolvedPaths,omitzero"`
+ // Runtime-resolved canonical working directory the command runs in, used for authorization identity checks. Internal and experimental; clients should not display it.
+ // Experimental: ResolvedWorkingDirectory is part of an experimental API and may change or be removed.
+ ResolvedWorkingDirectory *string `json:"resolvedWorkingDirectory,omitempty"`
// Tool call ID that triggered this permission request
ToolCallID *string `json:"toolCallId,omitempty"`
// Optional warning message about risks of running this command
@@ -4221,6 +4338,9 @@ type PermissionRequestWrite struct {
RequestSandboxBypass *bool `json:"requestSandboxBypass,omitempty"`
// Justification for the sandbox-bypass request. Only meaningful when requestSandboxBypass is true.
RequestSandboxBypassReason *string `json:"requestSandboxBypassReason,omitempty"`
+ // Runtime-resolved canonical path used for authorization identity checks. Internal and experimental; clients should continue to display fileName.
+ // Experimental: ResolvedPath is part of an experimental API and may change or be removed.
+ ResolvedPath *string `json:"resolvedPath,omitempty"`
// Tool call ID that triggered this permission request
ToolCallID *string `json:"toolCallId,omitempty"`
}
@@ -5743,6 +5863,17 @@ const (
OmittedBinaryTypeResource OmittedBinaryType = "resource"
)
+// Which direction a message-backed authorization claim moves authority in.
+// Experimental: PermissionMessageAuthorizationPolarity is part of an experimental API and may change or be removed.
+type PermissionMessageAuthorizationPolarity string
+
+const (
+ // The human's words refused an effect.
+ PermissionMessageAuthorizationPolarityDenial PermissionMessageAuthorizationPolarity = "denial"
+ // The human's words authorized an effect.
+ PermissionMessageAuthorizationPolarityGrant PermissionMessageAuthorizationPolarity = "grant"
+)
+
// Kind discriminator for PermissionPromptRequest.
type PermissionPromptRequestKind string
diff --git a/go/zsession_events.go b/go/zsession_events.go
index 25d7ef5460..5dac5f535c 100644
--- a/go/zsession_events.go
+++ b/go/zsession_events.go
@@ -194,12 +194,17 @@ type (
PermissionApprovedForSession = rpc.PermissionApprovedForSession
PermissionAssistedApproval = rpc.PermissionAssistedApproval
PermissionCancelled = rpc.PermissionCancelled
+ PermissionCarriedForwardData = rpc.PermissionCarriedForwardData
PermissionCompletedData = rpc.PermissionCompletedData
PermissionDeniedByContentExclusionPolicy = rpc.PermissionDeniedByContentExclusionPolicy
PermissionDeniedByPermissionRequestHook = rpc.PermissionDeniedByPermissionRequestHook
PermissionDeniedByRules = rpc.PermissionDeniedByRules
PermissionDeniedInteractivelyByUser = rpc.PermissionDeniedInteractivelyByUser
PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser = rpc.PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser
+ PermissionMessageAuthorizationData = rpc.PermissionMessageAuthorizationData
+ PermissionMessageAuthorizationDegradedData = rpc.PermissionMessageAuthorizationDegradedData
+ PermissionMessageAuthorizationPolarity = rpc.PermissionMessageAuthorizationPolarity
+ PermissionMessageAuthorizationReadData = rpc.PermissionMessageAuthorizationReadData
PermissionMode = rpc.PermissionMode
PermissionPromptRequest = rpc.PermissionPromptRequest
PermissionPromptRequestCommands = rpc.PermissionPromptRequestCommands
@@ -653,6 +658,9 @@ const (
OmittedBinaryOmittedReasonTooLarge = rpc.OmittedBinaryOmittedReasonTooLarge
OmittedBinaryTypeImage = rpc.OmittedBinaryTypeImage
OmittedBinaryTypeResource = rpc.OmittedBinaryTypeResource
+ PermissionDecisionSourceAuthorizationCarryForward = rpc.PermissionDecisionSourceAuthorizationCarryForward
+ PermissionMessageAuthorizationPolarityDenial = rpc.PermissionMessageAuthorizationPolarityDenial
+ PermissionMessageAuthorizationPolarityGrant = rpc.PermissionMessageAuthorizationPolarityGrant
PermissionModeAllowAll = rpc.PermissionModeAllowAll
PermissionModeAssisted = rpc.PermissionModeAssisted
PermissionModeManual = rpc.PermissionModeManual
@@ -771,7 +779,11 @@ const (
SessionEventTypeModelCallFinished = rpc.SessionEventTypeModelCallFinished
SessionEventTypeModelCallStart = rpc.SessionEventTypeModelCallStart
SessionEventTypePendingMessagesModified = rpc.SessionEventTypePendingMessagesModified
+ SessionEventTypePermissionCarriedForward = rpc.SessionEventTypePermissionCarriedForward
SessionEventTypePermissionCompleted = rpc.SessionEventTypePermissionCompleted
+ SessionEventTypePermissionMessageAuthorization = rpc.SessionEventTypePermissionMessageAuthorization
+ SessionEventTypePermissionMessageAuthorizationDegraded = rpc.SessionEventTypePermissionMessageAuthorizationDegraded
+ SessionEventTypePermissionMessageAuthorizationRead = rpc.SessionEventTypePermissionMessageAuthorizationRead
SessionEventTypePermissionRequested = rpc.SessionEventTypePermissionRequested
SessionEventTypePromptCacheBreak = rpc.SessionEventTypePromptCacheBreak
SessionEventTypeSamplingCompleted = rpc.SessionEventTypeSamplingCompleted
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/PermissionCarriedForwardEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionCarriedForwardEvent.java
new file mode 100644
index 0000000000..27a5d0df91
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionCarriedForwardEvent.java
@@ -0,0 +1,47 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.generated;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Session event "permission.carriedForward". Records that a live authorization record from an earlier human decision in this session contained a permission proposal, so it ran without another prompt. This mints no authority: it accounts for one more effect against the prior grant, which is what lets a replayed session agree with the live one about how much of that grant is left.
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class PermissionCarriedForwardEvent extends SessionEvent {
+
+ @Override
+ public String getType() { return "permission.carriedForward"; }
+
+ @JsonProperty("data")
+ private PermissionCarriedForwardEventData data;
+
+ public PermissionCarriedForwardEventData getData() { return data; }
+ public void setData(PermissionCarriedForwardEventData data) { this.data = data; }
+
+ /** Data payload for {@link PermissionCarriedForwardEvent}. */
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public record PermissionCarriedForwardEventData(
+ /** Authorization edge minted for this admission. Not a prompt id: no prompt was raised, so no client should expect a request with this id. */
+ @JsonProperty("requestId") String requestId,
+ /** Tool call this admission authorizes. Its execution receipts the prior grant, which is how a single-effect approval is spent rather than carried forward again. */
+ @JsonProperty("toolCallId") String toolCallId,
+ /** Identity of the prior authorization record that contained the proposal. */
+ @JsonProperty("recordId") String recordId,
+ /** Always `authorization_carry_forward`. Stated explicitly so a consumer reading this event cannot mistake it for a human, host-policy, or assisted-approval decision. */
+ @JsonProperty("decisionSource") PermissionDecisionSource decisionSource
+ ) {
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/PermissionCompletedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionCompletedEvent.java
index a21c25e8db..51e19ad373 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/PermissionCompletedEvent.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionCompletedEvent.java
@@ -39,7 +39,9 @@ public record PermissionCompletedEventData(
/** Optional tool call ID associated with this permission prompt; clients may use it to correlate UI created from tool-scoped prompts */
@JsonProperty("toolCallId") String toolCallId,
/** The result of the permission request */
- @JsonProperty("result") Object result
+ @JsonProperty("result") Object result,
+ /** Who decided this permission request. Absent on completions recorded before this field existed, which consumers must treat as "not a human decision" rather than assuming one. Authorization records are minted only for `human_response`; an assisted-approval verdict, a host policy, an unattended fallback, and a hook resolution all produce the same `result` a person does, so this is the only field that distinguishes them. */
+ @JsonProperty("decisionSource") PermissionDecisionSource decisionSource
) {
}
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/PermissionDecisionSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionDecisionSource.java
new file mode 100644
index 0000000000..a8a8d73ed4
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionDecisionSource.java
@@ -0,0 +1,41 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.generated;
+
+import javax.annotation.processing.Generated;
+
+/**
+ * Controlled reason or actor responsible for a permission response.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public enum PermissionDecisionSource {
+ /** The {@code assisted_approval} variant. */
+ ASSISTED_APPROVAL("assisted_approval"),
+ /** The {@code human_response} variant. */
+ HUMAN_RESPONSE("human_response"),
+ /** The {@code host_policy} variant. */
+ HOST_POLICY("host_policy"),
+ /** The {@code unattended_fallback} variant. */
+ UNATTENDED_FALLBACK("unattended_fallback"),
+ /** The {@code authorization_carry_forward} variant. */
+ AUTHORIZATION_CARRY_FORWARD("authorization_carry_forward");
+
+ private final String value;
+ PermissionDecisionSource(String value) { this.value = value; }
+ @com.fasterxml.jackson.annotation.JsonValue
+ public String getValue() { return value; }
+ @com.fasterxml.jackson.annotation.JsonCreator
+ public static PermissionDecisionSource fromValue(String value) {
+ for (PermissionDecisionSource v : values()) {
+ if (v.value.equals(value)) return v;
+ }
+ throw new IllegalArgumentException("Unknown PermissionDecisionSource value: " + value);
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationDegradedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationDegradedEvent.java
new file mode 100644
index 0000000000..dc37375dcf
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationDegradedEvent.java
@@ -0,0 +1,41 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.generated;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Session event "permission.messageAuthorizationDegraded". Records that message-backed authorization could not safely represent one human turn before compaction. The runtime may compact the original message after this marker is durable, but message-derived carry-forward and assisted auto-approval remain disabled for the rest of the session so subsequent commands continue through the ordinary permission prompt.
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class PermissionMessageAuthorizationDegradedEvent extends SessionEvent {
+
+ @Override
+ public String getType() { return "permission.messageAuthorizationDegraded"; }
+
+ @JsonProperty("data")
+ private PermissionMessageAuthorizationDegradedEventData data;
+
+ public PermissionMessageAuthorizationDegradedEventData getData() { return data; }
+ public void setData(PermissionMessageAuthorizationDegradedEventData data) { this.data = data; }
+
+ /** Data payload for {@link PermissionMessageAuthorizationDegradedEvent}. */
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public record PermissionMessageAuthorizationDegradedEventData(
+ /** The human turn that could not be represented safely. */
+ @JsonProperty("turnIndex") Long turnIndex
+ ) {
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationEvent.java
new file mode 100644
index 0000000000..c87dce05cb
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationEvent.java
@@ -0,0 +1,58 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.generated;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.List;
+import javax.annotation.processing.Generated;
+
+/**
+ * Session event "permission.messageAuthorization". Freezes one blinded, verbatim-verified authorization claim the runtime minted from a human user message, so a resumed session re-establishes the same grant deterministically instead of re-running the extraction model. This mints no authority on its own: it records what a blinded proposer pointed at and the trusted discriminator the runtime established, and deterministic establishment runs on replay. Persisted so recorded authority survives compaction and process resume.
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class PermissionMessageAuthorizationEvent extends SessionEvent {
+
+ @Override
+ public String getType() { return "permission.messageAuthorization"; }
+
+ @JsonProperty("data")
+ private PermissionMessageAuthorizationEventData data;
+
+ public PermissionMessageAuthorizationEventData getData() { return data; }
+ public void setData(PermissionMessageAuthorizationEventData data) { this.data = data; }
+
+ /** Data payload for {@link PermissionMessageAuthorizationEvent}. */
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public record PermissionMessageAuthorizationEventData(
+ /** Deterministic identity of the record, derived from the turn and span offsets so re-extracting the same span mints nothing new. */
+ @JsonProperty("recordId") String recordId,
+ /** The human turn the quoted span was read from. */
+ @JsonProperty("turnIndex") Long turnIndex,
+ /** Whether the claim granted or denied authority. */
+ @JsonProperty("polarity") PermissionMessageAuthorizationPolarity polarity,
+ /** The kind of effect authorized, as an action-class identifier. */
+ @JsonProperty("actionClass") String actionClass,
+ /** Start byte offset of the authorizing span within the turn. */
+ @JsonProperty("spanStart") Long spanStart,
+ /** End byte offset of the authorizing span within the turn. */
+ @JsonProperty("spanEnd") Long spanEnd,
+ /** Concrete named targets that appear verbatim inside the span. */
+ @JsonProperty("targetMembers") List targetMembers,
+ /** The task the permission is scoped to, when the human named one. */
+ @JsonProperty("task") String task,
+ /** The trusted version discriminator, when one exists. Exact shell-command grants carry the byte-identical commands grounded in the human span; world-derived classes carry a file object, remote tip, or runner only when that state was captured safely. An opaque object mirroring the runtime's adjacently-tagged resolution. */
+ @JsonProperty("world") Object world
+ ) {
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationPolarity.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationPolarity.java
new file mode 100644
index 0000000000..14bc8e2895
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationPolarity.java
@@ -0,0 +1,35 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.generated;
+
+import javax.annotation.processing.Generated;
+
+/**
+ * Which direction a message-backed authorization claim moves authority in.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public enum PermissionMessageAuthorizationPolarity {
+ /** The {@code grant} variant. */
+ GRANT("grant"),
+ /** The {@code denial} variant. */
+ DENIAL("denial");
+
+ private final String value;
+ PermissionMessageAuthorizationPolarity(String value) { this.value = value; }
+ @com.fasterxml.jackson.annotation.JsonValue
+ public String getValue() { return value; }
+ @com.fasterxml.jackson.annotation.JsonCreator
+ public static PermissionMessageAuthorizationPolarity fromValue(String value) {
+ for (PermissionMessageAuthorizationPolarity v : values()) {
+ if (v.value.equals(value)) return v;
+ }
+ throw new IllegalArgumentException("Unknown PermissionMessageAuthorizationPolarity value: " + value);
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationReadEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationReadEvent.java
new file mode 100644
index 0000000000..b05b7fc0bc
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/PermissionMessageAuthorizationReadEvent.java
@@ -0,0 +1,41 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.generated;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Session event "permission.messageAuthorizationRead". Records that one human turn has been read by the blinded authorization proposer, whether or not it minted anything, so a resumed session does not re-run the extraction model on a turn the live session already read. Persisted purely to avoid wasted model calls across resume; it is never a correctness mechanism.
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class PermissionMessageAuthorizationReadEvent extends SessionEvent {
+
+ @Override
+ public String getType() { return "permission.messageAuthorizationRead"; }
+
+ @JsonProperty("data")
+ private PermissionMessageAuthorizationReadEventData data;
+
+ public PermissionMessageAuthorizationReadEventData getData() { return data; }
+ public void setData(PermissionMessageAuthorizationReadEventData data) { this.data = data; }
+
+ /** Data payload for {@link PermissionMessageAuthorizationReadEvent}. */
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public record PermissionMessageAuthorizationReadEventData(
+ /** The human turn that was read by the proposer. */
+ @JsonProperty("turnIndex") Long turnIndex
+ ) {
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java
index a04aefe9f3..f41a34923b 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java
@@ -111,6 +111,10 @@
@JsonSubTypes.Type(value = SystemNotificationEvent.class, name = "system.notification"),
@JsonSubTypes.Type(value = PermissionRequestedEvent.class, name = "permission.requested"),
@JsonSubTypes.Type(value = PermissionCompletedEvent.class, name = "permission.completed"),
+ @JsonSubTypes.Type(value = PermissionCarriedForwardEvent.class, name = "permission.carriedForward"),
+ @JsonSubTypes.Type(value = PermissionMessageAuthorizationEvent.class, name = "permission.messageAuthorization"),
+ @JsonSubTypes.Type(value = PermissionMessageAuthorizationReadEvent.class, name = "permission.messageAuthorizationRead"),
+ @JsonSubTypes.Type(value = PermissionMessageAuthorizationDegradedEvent.class, name = "permission.messageAuthorizationDegraded"),
@JsonSubTypes.Type(value = UserInputRequestedEvent.class, name = "user_input.requested"),
@JsonSubTypes.Type(value = UserInputCompletedEvent.class, name = "user_input.completed"),
@JsonSubTypes.Type(value = ElicitationRequestedEvent.class, name = "elicitation.requested"),
@@ -251,6 +255,10 @@ public abstract sealed class SessionEvent permits
SystemNotificationEvent,
PermissionRequestedEvent,
PermissionCompletedEvent,
+ PermissionCarriedForwardEvent,
+ PermissionMessageAuthorizationEvent,
+ PermissionMessageAuthorizationReadEvent,
+ PermissionMessageAuthorizationDegradedEvent,
UserInputRequestedEvent,
UserInputCompletedEvent,
ElicitationRequestedEvent,
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartEvent.java
index 36691ca41e..24d0cad2a5 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartEvent.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/ToolExecutionStartEvent.java
@@ -50,6 +50,8 @@ public record ToolExecutionStartEventData(
@JsonProperty("mcpServerName") String mcpServerName,
/** Original tool name on the MCP server, when the tool is an MCP tool */
@JsonProperty("mcpToolName") String mcpToolName,
+ /** Transport the MCP server hosting this tool is connected over, when the tool is an MCP tool and the server is configured */
+ @JsonProperty("mcpTransport") McpServerTransport mcpTransport,
/** Identifier for the agent loop turn this tool was invoked in, matching the corresponding assistant.turn_start event */
@JsonProperty("turnId") String turnId,
/** When true, the tool output should be displayed expanded (verbatim) in the CLI timeline */
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogAiSkillCandidate.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogAiSkillCandidate.java
index 59e70f4935..5cbcafcc73 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogAiSkillCandidate.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogAiSkillCandidate.java
@@ -64,6 +64,10 @@ public final class CatalogAiSkillCandidate extends CatalogCandidate {
@JsonProperty("provenance")
private CatalogAiSkillCandidateProvenance provenance;
+ /** Versioned trust metadata observed from the catalog authority. Optional for protocol-3 compatibility with runtimes that predate trust snapshots. A trust-capable runtime emits an explicit snapshot even when the authority omitted or malformed its trust field. */
+ @JsonProperty("trust")
+ private CatalogTrustSnapshot trust;
+
public String getHandle() { return handle; }
public void setHandle(String handle) { this.handle = handle; }
@@ -90,4 +94,7 @@ public final class CatalogAiSkillCandidate extends CatalogCandidate {
public CatalogAiSkillCandidateProvenance getProvenance() { return provenance; }
public void setProvenance(CatalogAiSkillCandidateProvenance provenance) { this.provenance = provenance; }
+
+ public CatalogTrustSnapshot getTrust() { return trust; }
+ public void setTrust(CatalogTrustSnapshot trust) { this.trust = trust; }
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogCapability.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogCapability.java
index bb1662ba27..8a94f40819 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogCapability.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogCapability.java
@@ -25,7 +25,9 @@ public enum CatalogCapability {
/** The {@code mcp-install-planning} variant. */
MCP_INSTALL_PLANNING("mcp-install-planning"),
/** The {@code multiple-transport-choice} variant. */
- MULTIPLE_TRANSPORT_CHOICE("multiple-transport-choice");
+ MULTIPLE_TRANSPORT_CHOICE("multiple-transport-choice"),
+ /** The {@code trust-snapshot} variant. */
+ TRUST_SNAPSHOT("trust-snapshot");
private final String value;
CatalogCapability(String value) { this.value = value; }
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogMcpServerCandidate.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogMcpServerCandidate.java
index 8183ca422a..a58c19f729 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogMcpServerCandidate.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogMcpServerCandidate.java
@@ -64,6 +64,10 @@ public final class CatalogMcpServerCandidate extends CatalogCandidate {
@JsonProperty("provenance")
private CatalogMcpServerCandidateProvenance provenance;
+ /** Versioned trust metadata observed from the catalog authority. Optional for protocol-3 compatibility with runtimes that predate trust snapshots. A trust-capable runtime emits an explicit snapshot even when the authority omitted or malformed its trust field. */
+ @JsonProperty("trust")
+ private CatalogTrustSnapshot trust;
+
public String getHandle() { return handle; }
public void setHandle(String handle) { this.handle = handle; }
@@ -90,4 +94,7 @@ public final class CatalogMcpServerCandidate extends CatalogCandidate {
public CatalogMcpServerCandidateProvenance getProvenance() { return provenance; }
public void setProvenance(CatalogMcpServerCandidateProvenance provenance) { this.provenance = provenance; }
+
+ public CatalogTrustSnapshot getTrust() { return trust; }
+ public void setTrust(CatalogTrustSnapshot trust) { this.trust = trust; }
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogNegotiationRefusedError.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogNegotiationRefusedError.java
index 56e20d3b4e..5432396324 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogNegotiationRefusedError.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogNegotiationRefusedError.java
@@ -41,9 +41,9 @@ public final class CatalogNegotiationRefusedError extends CatalogSearchResult {
@JsonProperty("minimumSupportedProtocolVersion")
private Long minimumSupportedProtocolVersion;
- /** Every wire feature this runtime understands, so the caller can retry within that contract. This list does not imply that every deployment has enabled every operation. */
+ /** Capabilities this runtime can safely advertise to this caller. The complete five-capability protocol-3 legacy set is always present; every capability added after that baseline appears only when the caller required it, so an older closed-enum decoder can still consume a refusal. This list does not imply that every deployment has enabled every operation. */
@JsonProperty("supportedCapabilities")
- private List supportedCapabilities;
+ private List supportedCapabilities;
/** The subset of the caller's bounded extensible capability identifiers this runtime cannot honour. */
@JsonProperty("unsupportedCapabilities")
@@ -62,8 +62,8 @@ public final class CatalogNegotiationRefusedError extends CatalogSearchResult {
public Long getMinimumSupportedProtocolVersion() { return minimumSupportedProtocolVersion; }
public void setMinimumSupportedProtocolVersion(Long minimumSupportedProtocolVersion) { this.minimumSupportedProtocolVersion = minimumSupportedProtocolVersion; }
- public List getSupportedCapabilities() { return supportedCapabilities; }
- public void setSupportedCapabilities(List supportedCapabilities) { this.supportedCapabilities = supportedCapabilities; }
+ public List getSupportedCapabilities() { return supportedCapabilities; }
+ public void setSupportedCapabilities(List supportedCapabilities) { this.supportedCapabilities = supportedCapabilities; }
public List getUnsupportedCapabilities() { return unsupportedCapabilities; }
public void setUnsupportedCapabilities(List unsupportedCapabilities) { this.unsupportedCapabilities = unsupportedCapabilities; }
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustEligibility.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustEligibility.java
new file mode 100644
index 0000000000..91b9f8847e
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustEligibility.java
@@ -0,0 +1,39 @@
+/*---------------------------------------------------------------------------------------------
+ * 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 javax.annotation.processing.Generated;
+
+/**
+ * Authority-computed exposure eligibility, kept separate from tier. The current tier-only Agent Finder response maps to `unknown`, never to a locally inferred eligibility.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public enum CatalogTrustEligibility {
+ /** The {@code default} variant. */
+ DEFAULT("default"),
+ /** The {@code expanded} variant. */
+ EXPANDED("expanded"),
+ /** The {@code hidden} variant. */
+ HIDDEN("hidden"),
+ /** The {@code unknown} variant. */
+ UNKNOWN("unknown");
+
+ private final String value;
+ CatalogTrustEligibility(String value) { this.value = value; }
+ @com.fasterxml.jackson.annotation.JsonValue
+ public String getValue() { return value; }
+ @com.fasterxml.jackson.annotation.JsonCreator
+ public static CatalogTrustEligibility fromValue(String value) {
+ for (CatalogTrustEligibility v : values()) {
+ if (v.value.equals(value)) return v;
+ }
+ throw new IllegalArgumentException("Unknown CatalogTrustEligibility value: " + value);
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustProvenance.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustProvenance.java
new file mode 100644
index 0000000000..2f4c5718d4
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustProvenance.java
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------------------------
+ * 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 java.time.OffsetDateTime;
+import javax.annotation.processing.Generated;
+
+/**
+ * Where and when the runtime observed the trust metadata. Observation time is not the authority's evaluation time and must not be used to infer staleness.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record CatalogTrustProvenance(
+ /** Bounded authority that supplied the trust field. */
+ @JsonProperty("source") CatalogTrustSource source,
+ /** ISO 8601 timestamp with a timezone offset at which the runtime observed the search result carrying this trust field. */
+ @JsonProperty("observedAt") OffsetDateTime observedAt
+) {
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshot.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshot.java
new file mode 100644
index 0000000000..be90c08f41
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshot.java
@@ -0,0 +1,40 @@
+/*---------------------------------------------------------------------------------------------
+ * 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.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import javax.annotation.processing.Generated;
+
+/**
+ * A versioned, bounded trust observation carried unchanged with a catalog candidate and its private handle context. Current observations require a recognised T1/T2 tier; every non-current state structurally forbids a tier. Eligibility remains `unknown` while Agent Finder supplies no exposure decision, and states absent from its current wire are never inferred from age, relevance, popularity, or a tier transition.
+ *
+ * @since 1.0.0
+ */
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "status", visible = true)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = CatalogTrustSnapshotCurrent.class, name = "current"),
+ @JsonSubTypes.Type(value = CatalogTrustSnapshotAbsent.class, name = "absent"),
+ @JsonSubTypes.Type(value = CatalogTrustSnapshotStale.class, name = "stale"),
+ @JsonSubTypes.Type(value = CatalogTrustSnapshotDowngraded.class, name = "downgraded"),
+ @JsonSubTypes.Type(value = CatalogTrustSnapshotRevoked.class, name = "revoked"),
+ @JsonSubTypes.Type(value = CatalogTrustSnapshotUnsupported.class, name = "unsupported"),
+ @JsonSubTypes.Type(value = CatalogTrustSnapshotMalformed.class, name = "malformed")
+})
+@JsonIgnoreProperties(ignoreUnknown = true)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public abstract class CatalogTrustSnapshot {
+
+ /**
+ * Returns the discriminator value for this variant.
+ *
+ * @return the status discriminator
+ */
+ public abstract String getStatus();
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotAbsent.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotAbsent.java
new file mode 100644
index 0000000000..2bba3db626
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotAbsent.java
@@ -0,0 +1,51 @@
+/*---------------------------------------------------------------------------------------------
+ * 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;
+
+/**
+ * Discriminator: the authority omitted trust metadata.
+ *
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class CatalogTrustSnapshotAbsent extends CatalogTrustSnapshot {
+
+ @JsonProperty("status")
+ private final String status = "absent";
+
+ @Override
+ public String getStatus() { return status; }
+
+ /** Schema version of this runtime-owned snapshot envelope. */
+ @JsonProperty("schemaVersion")
+ private CatalogTrustSnapshotSchemaVersion schemaVersion;
+
+ /** Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field. */
+ @JsonProperty("eligibility")
+ private CatalogTrustEligibility eligibility;
+
+ /** Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust. */
+ @JsonProperty("provenance")
+ private CatalogTrustProvenance provenance;
+
+ public CatalogTrustSnapshotSchemaVersion getSchemaVersion() { return schemaVersion; }
+ public void setSchemaVersion(CatalogTrustSnapshotSchemaVersion schemaVersion) { this.schemaVersion = schemaVersion; }
+
+ public CatalogTrustEligibility getEligibility() { return eligibility; }
+ public void setEligibility(CatalogTrustEligibility eligibility) { this.eligibility = eligibility; }
+
+ public CatalogTrustProvenance getProvenance() { return provenance; }
+ public void setProvenance(CatalogTrustProvenance provenance) { this.provenance = provenance; }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotCurrent.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotCurrent.java
new file mode 100644
index 0000000000..42b4c40621
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotCurrent.java
@@ -0,0 +1,58 @@
+/*---------------------------------------------------------------------------------------------
+ * 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;
+
+/**
+ * A recognised current Agent Finder T1 or T2 trust tier.
+ *
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class CatalogTrustSnapshotCurrent extends CatalogTrustSnapshot {
+
+ @JsonProperty("status")
+ private final String status = "current";
+
+ @Override
+ public String getStatus() { return status; }
+
+ /** Schema version of this runtime-owned snapshot envelope. */
+ @JsonProperty("schemaVersion")
+ private CatalogTrustSnapshotSchemaVersion schemaVersion;
+
+ /** Service-computed T1 or T2 trust tier. */
+ @JsonProperty("tier")
+ private CatalogTrustTier tier;
+
+ /** Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field. */
+ @JsonProperty("eligibility")
+ private CatalogTrustEligibility eligibility;
+
+ /** Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust. */
+ @JsonProperty("provenance")
+ private CatalogTrustProvenance provenance;
+
+ public CatalogTrustSnapshotSchemaVersion getSchemaVersion() { return schemaVersion; }
+ public void setSchemaVersion(CatalogTrustSnapshotSchemaVersion schemaVersion) { this.schemaVersion = schemaVersion; }
+
+ public CatalogTrustTier getTier() { return tier; }
+ public void setTier(CatalogTrustTier tier) { this.tier = tier; }
+
+ public CatalogTrustEligibility getEligibility() { return eligibility; }
+ public void setEligibility(CatalogTrustEligibility eligibility) { this.eligibility = eligibility; }
+
+ public CatalogTrustProvenance getProvenance() { return provenance; }
+ public void setProvenance(CatalogTrustProvenance provenance) { this.provenance = provenance; }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotDowngraded.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotDowngraded.java
new file mode 100644
index 0000000000..552c759eca
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotDowngraded.java
@@ -0,0 +1,51 @@
+/*---------------------------------------------------------------------------------------------
+ * 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;
+
+/**
+ * Discriminator: the authority explicitly reported a downgraded assessment.
+ *
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class CatalogTrustSnapshotDowngraded extends CatalogTrustSnapshot {
+
+ @JsonProperty("status")
+ private final String status = "downgraded";
+
+ @Override
+ public String getStatus() { return status; }
+
+ /** Schema version of this runtime-owned snapshot envelope. */
+ @JsonProperty("schemaVersion")
+ private CatalogTrustSnapshotSchemaVersion schemaVersion;
+
+ /** Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field. */
+ @JsonProperty("eligibility")
+ private CatalogTrustEligibility eligibility;
+
+ /** Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust. */
+ @JsonProperty("provenance")
+ private CatalogTrustProvenance provenance;
+
+ public CatalogTrustSnapshotSchemaVersion getSchemaVersion() { return schemaVersion; }
+ public void setSchemaVersion(CatalogTrustSnapshotSchemaVersion schemaVersion) { this.schemaVersion = schemaVersion; }
+
+ public CatalogTrustEligibility getEligibility() { return eligibility; }
+ public void setEligibility(CatalogTrustEligibility eligibility) { this.eligibility = eligibility; }
+
+ public CatalogTrustProvenance getProvenance() { return provenance; }
+ public void setProvenance(CatalogTrustProvenance provenance) { this.provenance = provenance; }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotMalformed.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotMalformed.java
new file mode 100644
index 0000000000..26fa0f0414
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotMalformed.java
@@ -0,0 +1,51 @@
+/*---------------------------------------------------------------------------------------------
+ * 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;
+
+/**
+ * Discriminator: the trust field was empty, unbounded, or had the wrong JSON type.
+ *
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class CatalogTrustSnapshotMalformed extends CatalogTrustSnapshot {
+
+ @JsonProperty("status")
+ private final String status = "malformed";
+
+ @Override
+ public String getStatus() { return status; }
+
+ /** Schema version of this runtime-owned snapshot envelope. */
+ @JsonProperty("schemaVersion")
+ private CatalogTrustSnapshotSchemaVersion schemaVersion;
+
+ /** Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field. */
+ @JsonProperty("eligibility")
+ private CatalogTrustEligibility eligibility;
+
+ /** Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust. */
+ @JsonProperty("provenance")
+ private CatalogTrustProvenance provenance;
+
+ public CatalogTrustSnapshotSchemaVersion getSchemaVersion() { return schemaVersion; }
+ public void setSchemaVersion(CatalogTrustSnapshotSchemaVersion schemaVersion) { this.schemaVersion = schemaVersion; }
+
+ public CatalogTrustEligibility getEligibility() { return eligibility; }
+ public void setEligibility(CatalogTrustEligibility eligibility) { this.eligibility = eligibility; }
+
+ public CatalogTrustProvenance getProvenance() { return provenance; }
+ public void setProvenance(CatalogTrustProvenance provenance) { this.provenance = provenance; }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotRevoked.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotRevoked.java
new file mode 100644
index 0000000000..d3163bba4a
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotRevoked.java
@@ -0,0 +1,51 @@
+/*---------------------------------------------------------------------------------------------
+ * 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;
+
+/**
+ * Discriminator: the authority explicitly revoked the assessment.
+ *
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class CatalogTrustSnapshotRevoked extends CatalogTrustSnapshot {
+
+ @JsonProperty("status")
+ private final String status = "revoked";
+
+ @Override
+ public String getStatus() { return status; }
+
+ /** Schema version of this runtime-owned snapshot envelope. */
+ @JsonProperty("schemaVersion")
+ private CatalogTrustSnapshotSchemaVersion schemaVersion;
+
+ /** Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field. */
+ @JsonProperty("eligibility")
+ private CatalogTrustEligibility eligibility;
+
+ /** Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust. */
+ @JsonProperty("provenance")
+ private CatalogTrustProvenance provenance;
+
+ public CatalogTrustSnapshotSchemaVersion getSchemaVersion() { return schemaVersion; }
+ public void setSchemaVersion(CatalogTrustSnapshotSchemaVersion schemaVersion) { this.schemaVersion = schemaVersion; }
+
+ public CatalogTrustEligibility getEligibility() { return eligibility; }
+ public void setEligibility(CatalogTrustEligibility eligibility) { this.eligibility = eligibility; }
+
+ public CatalogTrustProvenance getProvenance() { return provenance; }
+ public void setProvenance(CatalogTrustProvenance provenance) { this.provenance = provenance; }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotSchemaVersion.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotSchemaVersion.java
new file mode 100644
index 0000000000..5d06990881
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotSchemaVersion.java
@@ -0,0 +1,33 @@
+/*---------------------------------------------------------------------------------------------
+ * 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 javax.annotation.processing.Generated;
+
+/**
+ * Schema version of the catalogue trust snapshot envelope
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public enum CatalogTrustSnapshotSchemaVersion {
+ /** The {@code v1} variant. */
+ V1("v1");
+
+ private final String value;
+ CatalogTrustSnapshotSchemaVersion(String value) { this.value = value; }
+ @com.fasterxml.jackson.annotation.JsonValue
+ public String getValue() { return value; }
+ @com.fasterxml.jackson.annotation.JsonCreator
+ public static CatalogTrustSnapshotSchemaVersion fromValue(String value) {
+ for (CatalogTrustSnapshotSchemaVersion v : values()) {
+ if (v.value.equals(value)) return v;
+ }
+ throw new IllegalArgumentException("Unknown CatalogTrustSnapshotSchemaVersion value: " + value);
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotStale.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotStale.java
new file mode 100644
index 0000000000..c9b64e4096
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotStale.java
@@ -0,0 +1,51 @@
+/*---------------------------------------------------------------------------------------------
+ * 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;
+
+/**
+ * Discriminator: the authority explicitly marked the assessment stale.
+ *
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class CatalogTrustSnapshotStale extends CatalogTrustSnapshot {
+
+ @JsonProperty("status")
+ private final String status = "stale";
+
+ @Override
+ public String getStatus() { return status; }
+
+ /** Schema version of this runtime-owned snapshot envelope. */
+ @JsonProperty("schemaVersion")
+ private CatalogTrustSnapshotSchemaVersion schemaVersion;
+
+ /** Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field. */
+ @JsonProperty("eligibility")
+ private CatalogTrustEligibility eligibility;
+
+ /** Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust. */
+ @JsonProperty("provenance")
+ private CatalogTrustProvenance provenance;
+
+ public CatalogTrustSnapshotSchemaVersion getSchemaVersion() { return schemaVersion; }
+ public void setSchemaVersion(CatalogTrustSnapshotSchemaVersion schemaVersion) { this.schemaVersion = schemaVersion; }
+
+ public CatalogTrustEligibility getEligibility() { return eligibility; }
+ public void setEligibility(CatalogTrustEligibility eligibility) { this.eligibility = eligibility; }
+
+ public CatalogTrustProvenance getProvenance() { return provenance; }
+ public void setProvenance(CatalogTrustProvenance provenance) { this.provenance = provenance; }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotUnsupported.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotUnsupported.java
new file mode 100644
index 0000000000..eacd3fbf92
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSnapshotUnsupported.java
@@ -0,0 +1,51 @@
+/*---------------------------------------------------------------------------------------------
+ * 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;
+
+/**
+ * Discriminator: the authority supplied a bounded trust value this runtime does not understand.
+ *
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class CatalogTrustSnapshotUnsupported extends CatalogTrustSnapshot {
+
+ @JsonProperty("status")
+ private final String status = "unsupported";
+
+ @Override
+ public String getStatus() { return status; }
+
+ /** Schema version of this runtime-owned snapshot envelope. */
+ @JsonProperty("schemaVersion")
+ private CatalogTrustSnapshotSchemaVersion schemaVersion;
+
+ /** Service-computed exposure eligibility. `unknown` is required while Agent Finder returns no explicit eligibility field. */
+ @JsonProperty("eligibility")
+ private CatalogTrustEligibility eligibility;
+
+ /** Bounded source and observation time for this snapshot. This is distinct from evidence used by the authority to calculate trust. */
+ @JsonProperty("provenance")
+ private CatalogTrustProvenance provenance;
+
+ public CatalogTrustSnapshotSchemaVersion getSchemaVersion() { return schemaVersion; }
+ public void setSchemaVersion(CatalogTrustSnapshotSchemaVersion schemaVersion) { this.schemaVersion = schemaVersion; }
+
+ public CatalogTrustEligibility getEligibility() { return eligibility; }
+ public void setEligibility(CatalogTrustEligibility eligibility) { this.eligibility = eligibility; }
+
+ public CatalogTrustProvenance getProvenance() { return provenance; }
+ public void setProvenance(CatalogTrustProvenance provenance) { this.provenance = provenance; }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSource.java
new file mode 100644
index 0000000000..c4180a11e5
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustSource.java
@@ -0,0 +1,33 @@
+/*---------------------------------------------------------------------------------------------
+ * 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 javax.annotation.processing.Generated;
+
+/**
+ * Bounded authority that supplied a catalogue trust observation
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public enum CatalogTrustSource {
+ /** The {@code agent-finder} variant. */
+ AGENT_FINDER("agent-finder");
+
+ private final String value;
+ CatalogTrustSource(String value) { this.value = value; }
+ @com.fasterxml.jackson.annotation.JsonValue
+ public String getValue() { return value; }
+ @com.fasterxml.jackson.annotation.JsonCreator
+ public static CatalogTrustSource fromValue(String value) {
+ for (CatalogTrustSource v : values()) {
+ if (v.value.equals(value)) return v;
+ }
+ throw new IllegalArgumentException("Unknown CatalogTrustSource value: " + value);
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustTier.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustTier.java
new file mode 100644
index 0000000000..466c6a571c
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CatalogTrustTier.java
@@ -0,0 +1,35 @@
+/*---------------------------------------------------------------------------------------------
+ * 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 javax.annotation.processing.Generated;
+
+/**
+ * Service-computed trust tier currently emitted by Agent Finder. It is independent of search score, popularity, and client-side ranking.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public enum CatalogTrustTier {
+ /** The {@code T1} variant. */
+ T1("T1"),
+ /** The {@code T2} variant. */
+ T2("T2");
+
+ private final String value;
+ CatalogTrustTier(String value) { this.value = value; }
+ @com.fasterxml.jackson.annotation.JsonValue
+ public String getValue() { return value; }
+ @com.fasterxml.jackson.annotation.JsonCreator
+ public static CatalogTrustTier fromValue(String value) {
+ for (CatalogTrustTier v : values()) {
+ if (v.value.equals(value)) return v;
+ }
+ throw new IllegalArgumentException("Unknown CatalogTrustTier value: " + value);
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CopilotUserResponse.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CopilotUserResponse.java
index cd6d5c83bd..ad501eac0d 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CopilotUserResponse.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/CopilotUserResponse.java
@@ -43,7 +43,7 @@ public record CopilotUserResponse(
@JsonProperty("endpoints") CopilotUserResponseEndpoints endpoints,
/** Logins of the organizations the user belongs to. */
@JsonProperty("organization_login_list") List organizationLoginList,
- /** Organizations the user belongs to, each with an optional login and display name. */
+ /** Organizations the user belongs to, each with an optional ID, login, and display name. */
@JsonProperty("organization_list") Object organizationList,
/** Whether the Codex agent is enabled for the user. */
@JsonProperty("codex_agent_enabled") Boolean codexAgentEnabled,
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsCursorStatus.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsCursorStatus.java
index 20f37bdfa4..32600aa4df 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsCursorStatus.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/EventsCursorStatus.java
@@ -10,7 +10,7 @@
import javax.annotation.processing.Generated;
/**
- * Cursor status: 'ok' means the cursor was applied successfully; 'expired' means the cursor referred to an event that no longer exists in history (e.g. truncated or compacted away) and the read fell back to a boundary of the remaining history (the beginning for a forward read, the tail for a backward read). The fallback page is a fresh boundary snapshot, not a continuation of the requested cursor, so it may overlap already-rendered events; on 'expired' a consumer should reset/rebase its pagination state (or deduplicate by event id) before continuing from the returned cursor.
+ * Cursor status: 'ok' means the read succeeded against the requested history; 'expired' means the requested continuation is unavailable. Recovery is endpoint-specific: session.eventLog.read returns a boundary window of remaining active history that may overlap prior pages, while sessions.readPersistedEvents returns an empty terminal page and never switches journal generations. An expired persisted read is not successful completion; a complete persisted snapshot requires cursorStatus 'ok' and hasMore false.
*
* @since 1.0.0
*/
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSource.java
index 56f5793c5e..66313b8070 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSource.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionDecisionSource.java
@@ -23,7 +23,9 @@ public enum PermissionDecisionSource {
/** The {@code host_policy} variant. */
HOST_POLICY("host_policy"),
/** The {@code unattended_fallback} variant. */
- UNATTENDED_FALLBACK("unattended_fallback");
+ UNATTENDED_FALLBACK("unattended_fallback"),
+ /** The {@code authorization_carry_forward} variant. */
+ AUTHORIZATION_CARRY_FORWARD("authorization_carry_forward");
private final String value;
PermissionDecisionSource(String value) { this.value = value; }
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadResult.java
index 857578d0fb..cda7ea4d25 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadResult.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionEventLogReadResult.java
@@ -30,9 +30,9 @@ public record SessionEventLogReadResult(
@JsonProperty("events") List events,
/** Opaque cursor for the next read. Pass back unchanged in the next read.cursor to continue from where this read left off. Always present, even when no events were returned. For a backward read this cursor pages toward OLDER events; keep passing `direction: backward` with it (the cursor is also self-describing, so backward paging continues correctly). */
@JsonProperty("cursor") String cursor,
- /** True when more events are available in the read's direction. For a forward read, true means the batch returned `max` events and more are available immediately. For a backward read, true means older persisted events remain before the returned window. */
+ /** True when more events are available in the read's direction. For a backward read, true means older persisted events remain before the returned window. A persisted-event page may contain fewer than `max` events because of its byte budget while still reporting hasMore true; continue according to this flag rather than the event count. */
@JsonProperty("hasMore") Boolean hasMore,
- /** Cursor status: 'ok' means the cursor was applied successfully; 'expired' means the cursor referred to an event that no longer exists in history (e.g. truncated or compacted away) and the read fell back to a boundary of the remaining history. For a forward read the fallback starts from the beginning of the remaining history; for a backward read it falls back to the tail (the newest window). Because the fallback page is a fresh boundary snapshot rather than a continuation of the requested cursor, it may overlap events the consumer has already rendered — a backward fallback to the tail in particular can repeat the newest window. On 'expired', consumers should reset or rebase their local pagination state (or deduplicate by event id) before continuing from the returned cursor rather than blindly appending/prepending the fallback page. */
+ /** Cursor status: 'ok' means the cursor was applied successfully. For session.eventLog.read, 'expired' means the cursor referred to an event that no longer exists in active history and the read fell back to a boundary of the remaining history: the beginning for a forward read or the newest window for a backward read. That fallback may overlap already rendered events, so active-session consumers should reset, rebase, or deduplicate before continuing. sessions.readPersistedEvents has stricter snapshot semantics: 'expired' returns an empty terminal page and never switches to a replacement journal generation. Other persisted-read I/O failures are RPC errors with diagnostics, not cursor expiry. */
@JsonProperty("cursorStatus") EventsCursorStatus cursorStatus
) {
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetApi.java
index 183117612e..ca855b70a9 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetApi.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetApi.java
@@ -31,7 +31,7 @@ public final class SessionFleetApi {
}
/**
- * Optional user prompt to combine with the fleet orchestration instructions.
+ * Parameters for starting fleet orchestration: an optional user prompt combined with the fleet instructions, plus the send options forwarded to the resulting turn.
*
* 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/SessionFleetStartParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartParams.java
index c2f0471cdc..e69e7a93d0 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartParams.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionFleetStartParams.java
@@ -11,10 +11,11 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.copilot.CopilotExperimental;
+import java.util.List;
import javax.annotation.processing.Generated;
/**
- * Optional user prompt to combine with the fleet orchestration instructions.
+ * Parameters for starting fleet orchestration: an optional user prompt combined with the fleet instructions, plus the send options forwarded to the resulting turn.
*
* @apiNote This method is experimental and may change in a future version.
* @since 1.0.0
@@ -27,6 +28,12 @@ public record SessionFleetStartParams(
/** Target session identifier */
@JsonProperty("sessionId") String sessionId,
/** Optional user prompt to combine with fleet instructions */
- @JsonProperty("prompt") String prompt
+ @JsonProperty("prompt") String prompt,
+ /** Optional attachments (files, directories, selections, blobs, GitHub references) to include with the fleet request */
+ @JsonProperty("attachments") List