Skip to content

Releases: microsoft/agent-host-protocol

AHP Swift Package v0.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Jul 18:26
3234536

[0.6.0] — 2026-07-20

Implements AHP 0.6.0.

Added

  • Changeset.capabilities with a review presence flag (ChangesetCapabilities) so a changeset can advertise support for the per-file review workflow up-front on the session's changeset list. (#328)
  • Optional _meta slot on SystemNotificationResponsePart, following the MCP _meta convention. A host MAY attach a machine-readable descriptor of what triggered the notification so clients can categorize, icon, group, filter, or localize it without parsing content. (#308)
  • chat/turnStarted carries a startedAt timestamp, chat/turnComplete/chat/turnCancelled/chat/error carry an elapsed duration (milliseconds, producer's own clock), and completed turns expose their start time and duration.
  • Asynchronous tool-call risk assessments with a model-provided explanation and normalized safety score.
  • ToolCallStatus.AuthRequired tool call state and chat/toolCallAuthRequired / chat/toolCallAuthResolved actions so a running MCP-contributed tool call can pause mid-execution on an OAuth challenge (McpAuthRequirement) and resume once the client authenticates; surfaced at the session level via a new toolAuthentication SessionInputRequest variant, and AuthenticateParams gained an optional scopes field and now accepts resources discovered from a live McpServerAuthRequiredState or ToolCallAuthRequiredState in addition to AgentInfo.protectedResources. chat/toolCallComplete now also accepts a failed result while a tool call is auth-required, letting a client cancel that invocation without completing the authentication challenge.
  • McpAuthRequirement.oauthClient metadata for pre-registered public and confidential OAuth clients.
  • AHPClient.ping() for protocol-level connection liveness and an AHPCommands.ping(id:) request factory, mirroring the TypeScript client's AhpClient.ping().
  • AHPCommands.createTerminal(id:params:) and AHPCommands.disposeTerminal(id:params:) request factories, so the generated CreateTerminalParams / DisposeTerminalParams are reachable through the typed command surface for parity with createSession / disposeSession. (#341)

Changed

  • Renamed the changeset review action changeset/filesReviewedChanged to changeset/filesReviewChanged (field fileIdsfiles) and made it client-dispatchable, so a reviewer can toggle a file's reviewed flag directly through the write-ahead reducer. (#328)
  • Input requests now live in turn responseParts, with an optional response until chat/inputCompleted submits the result. (#327)

AHP Spec v0.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Jul 18:25
3234536

[0.6.0] — 2026-07-20

Spec version: 0.6.0

Added

  • Changeset.capabilities with a review presence flag (ChangesetCapabilities) so a changeset can advertise support for the per-file review workflow up-front on the session's changeset list. (#328)
  • Optional _meta slot on SystemNotificationResponsePart, following the MCP _meta convention. A host MAY attach a machine-readable descriptor of what triggered the notification so clients can categorize, icon, group, filter, or localize it without parsing content. (#308)
  • chat/turnStarted carries a startedAt timestamp, chat/turnComplete/chat/turnCancelled/chat/error carry an elapsed duration (milliseconds, producer's own clock), and completed turns expose their start time and duration.
  • Asynchronous tool-call risk assessments with a model-provided explanation and normalized safety score.
  • ToolCallStatus.AuthRequired tool call state and chat/toolCallAuthRequired / chat/toolCallAuthResolved actions so a running MCP-contributed tool call can pause mid-execution on an OAuth challenge (McpAuthRequirement) and resume once the client authenticates; surfaced at the session level via a new toolAuthentication SessionInputRequest variant, and AuthenticateParams gained an optional scopes field and now accepts resources discovered from a live McpServerAuthRequiredState or ToolCallAuthRequiredState in addition to AgentInfo.protectedResources. chat/toolCallComplete now also accepts a failed result while a tool call is auth-required, letting a client cancel that invocation without completing the authentication challenge.
  • McpAuthRequirement.oauthClient metadata for pre-registered public and confidential OAuth clients.

Changed

  • Renamed the changeset review action changeset/filesReviewedChanged to changeset/filesReviewChanged (field fileIdsfiles) and made it client-dispatchable, so a reviewer can toggle a file's reviewed flag directly through the write-ahead reducer. (#328)
  • Input requests now live in turn responseParts, with an optional response until chat/inputCompleted submits the result. (#327)

Go module v0.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Jul 18:26
3234536

[0.6.0] — 2026-07-20

Implements AHP 0.6.0.

Added

  • Changeset.capabilities with a review presence flag (ChangesetCapabilities) so a changeset can advertise support for the per-file review workflow up-front on the session's changeset list. (#328)
  • Optional _meta slot on SystemNotificationResponsePart, following the MCP _meta convention. A host MAY attach a machine-readable descriptor of what triggered the notification so clients can categorize, icon, group, filter, or localize it without parsing content. (#308)
  • chat/turnStarted carries a startedAt timestamp, chat/turnComplete/chat/turnCancelled/chat/error carry an elapsed duration (milliseconds, producer's own clock), and completed turns expose their start time and duration.
  • Asynchronous tool-call risk assessments with a model-provided explanation and normalized safety score.
  • ToolCallStatus.AuthRequired tool call state and chat/toolCallAuthRequired / chat/toolCallAuthResolved actions so a running MCP-contributed tool call can pause mid-execution on an OAuth challenge (McpAuthRequirement) and resume once the client authenticates; surfaced at the session level via a new toolAuthentication SessionInputRequest variant, and AuthenticateParams gained an optional scopes field and now accepts resources discovered from a live McpServerAuthRequiredState or ToolCallAuthRequiredState in addition to AgentInfo.protectedResources. chat/toolCallComplete now also accepts a failed result while a tool call is auth-required, letting a client cancel that invocation without completing the authentication challenge.
  • Client.Ping() for protocol-level connection liveness, mirroring the TypeScript client's AhpClient.ping().
  • McpAuthRequirement.oauthClient metadata for pre-registered public and confidential OAuth clients.

Changed

  • Renamed the changeset review action changeset/filesReviewedChanged to changeset/filesReviewChanged (field fileIdsfiles) and made it client-dispatchable, so a reviewer can toggle a file's reviewed flag directly through the write-ahead reducer. (#328)
  • Input requests now live in turn responseParts, with an optional response until chat/inputCompleted submits the result. (#327)

AHP Swift Package v0.5.2

Choose a tag to compare

@github-actions github-actions released this 09 Jul 20:39
40a1dfa

[0.5.2] — 2026-07-09

Implements AHP 0.5.2.

Added

  • Typed resource* convenience methods on AHPClient: send wrappers (resourceRead, resourceWrite, resourceList, resourceCopy, resourceDelete, resourceMove, resourceResolve, resourceMkdir, resourceRequest, createResourceWatch) and inbound server-request handling via setServerRequestHandler(_:) / setResourceRequestHandlers(_:) (new ServerRequestHandler typealias and ResourceRequestHandlers type). Inbound server-initiated requests are answered by the installed handler (still MethodNotFound when none is set).
  • ToolResultTerminalCompleteContent for terminal-style completion metadata in tool
    results.
  • Optional enabled field on the child customization types
    (AgentCustomization, SkillCustomization, PromptCustomization,
    RuleCustomization, HookCustomization).
  • disableUserInvocation on SkillCustomization, plus disableModelInvocation
    and disableUserInvocation on AgentCustomization.
  • Optional reviewed field on ChangesetFile. Omitting it (or setting it to
    nil) signals that the server does not support the file "review"
    functionality.
  • changeset/filesReviewedChanged action for servers to update the reviewed
    flag of one or more changeset files.
  • Optional meta (wire _meta) provider-metadata field on every customization
    type, moved from AgentCustomization up to the shared customization base so
    PluginCustomization, ClientPluginCustomization, DirectoryCustomization,
    SkillCustomization, PromptCustomization, RuleCustomization,
    HookCustomization, and McpServerCustomization all carry it.
  • Optional serverInfo on InitializeResult and clientInfo on
    InitializeParams, each an Implementation (name, optional version,
    optional title), identifying the implementation and build behind either side
    of the handshake. Informational only — MUST NOT be used for feature detection.
  • Optional terminalCommandPrefix on InitializeResult for hosts that support
    interpreting !-prefixed user messages as terminal commands.
  • Optional version field on PluginCustomization (inherited by
    ClientPluginCustomization), carrying the plugin's semver sourced from the
    Open Plugins manifest. Provenance / display only.
  • session/mcpServerStartRequested and session/mcpServerStopRequested
    actions for clients to ask the host to start or stop MCP servers; stopping
    moves an authRequired server to stopped so it no longer waits on
    authentication.
  • InputRequestResponsePart and the ResponsePart.inputRequest case. The
    reducer now records a resolved input request in the active turn's
    responseParts on chatInputCompleted — embedding the resolved
    ChatInputRequest (final answers) and the response (accept, decline,
    or cancel) — so the outcome persists after the live request is removed.
    Abandoned requests still record nothing (#324).

Changed

  • The session/customizationToggled reducer now toggles any top-level
    customization (plugin, directory, or top-level mcpServer) or an
    individual child by id, setting that entry's enabled.

AHP Spec v0.5.2

Choose a tag to compare

@github-actions github-actions released this 09 Jul 20:37
40a1dfa

[0.5.2] — 2026-07-09

Spec version: 0.5.2

Added

  • ToolResultTerminalCompleteContent for terminal-style completion metadata in tool
    results.
  • Optional enabled flag on the child customizations (AgentCustomization,
    SkillCustomization, PromptCustomization, RuleCustomization,
    HookCustomization) so an individual child can be turned off independently of
    its container; absent means enabled.
  • disableUserInvocation on SkillCustomization, plus disableModelInvocation
    and disableUserInvocation on AgentCustomization, giving custom agents and
    skills a symmetric user/model invocation matrix.
  • Optional reviewed field on ChangesetFile. Omitting it (or setting it to
    undefined) signals that the server does not support the file "review"
    functionality.
  • changeset/filesReviewedChanged action for servers to update the reviewed
    flag of one or more changeset files.
  • Hoisted the optional _meta provider-metadata slot from AgentCustomization
    up to the shared CustomizationBase, so every customization type
    (PluginCustomization, ClientPluginCustomization, DirectoryCustomization,
    SkillCustomization, PromptCustomization, RuleCustomization,
    HookCustomization, and McpServerCustomization) now carries the same
    provider-specific escape hatch. Wire-compatible: AgentCustomization still
    exposes _meta, now by inheritance.
  • Optional serverInfo on InitializeResult and clientInfo on
    InitializeParams, each an Implementation (name, optional version,
    optional title), so either side of the handshake can identify its
    implementation and build. Informational only — mirrors LSP/MCP and MUST NOT
    be used for feature detection.
  • InputRequestResponsePart (kind: 'inputRequest') — a new ResponsePart
    variant that records a resolved input request in a turn's transcript. On
    chat/inputCompleted, the reducer now appends this part (embedding the
    resolved ChatInputRequest with its final answers and the response:
    accept, decline, or cancel) to the active turn's responseParts, so an
    elicitation's outcome persists durably, mirroring how a resolved tool-call
    confirmation is retained. Requests abandoned by turn end, cancel, error, or
    truncation still record nothing (#324).
  • Optional terminalCommandPrefix marker on InitializeResult for hosts that
    support interpreting !-prefixed user messages as terminal commands.
  • Optional version field on PluginCustomization (inherited by
    ClientPluginCustomization), carrying the plugin's semver sourced from the
    Open Plugins manifest's optional version. Provenance / display only; absent
    when the manifest declares no version or the source has no version concept.
  • session/mcpServerStartRequested and session/mcpServerStopRequested
    actions for clients to ask the host to start or stop MCP servers; stopping
    moves an authRequired server to stopped so it no longer waits on
    authentication.

Changed

  • session/customizationToggled now targets any top-level customization
    (plugin, directory, or top-level mcpServer) or an individual child by
    id and sets that entry's enabled; the effective state of a child is
    container.enabled && (child.enabled ?? true).

Fixed

  • The generated JSON Schema artifacts (schema/*.json) are now self-contained
    and strict-oneOf-safe. The generator no longer emits an empty {} branch in
    a union type alias's oneOf (which matched any value and defeated strict
    oneOf validation), backfills the enum, enum-member, and type-alias $refs
    that were previously dangling across all five schema files, and renders null
    members as { "type": "null" } (#302).

Go module v0.5.2

Choose a tag to compare

@github-actions github-actions released this 09 Jul 20:38
40a1dfa

[0.5.2] — 2026-07-09

Implements AHP 0.5.2.

Added

  • Typed resource* convenience methods on ahp.Client: send wrappers (ResourceRead, ResourceWrite, ResourceList, ResourceCopy, ResourceDelete, ResourceMove, ResourceResolve, ResourceMkdir, ResourceRequest, CreateResourceWatch) and inbound server-request handling via SetServerRequestHandler / SetResourceRequestHandlers (new ServerRequestHandler and ResourceRequestHandlers types). Inbound server-initiated requests are now answered (previously dropped) — via the installed handler, or MethodNotFound when none is set.
  • ToolResultTerminalCompleteContent for terminal-style completion metadata in tool
    results.
  • Optional Enabled field on the child customization types
    (AgentCustomization, SkillCustomization, PromptCustomization,
    RuleCustomization, HookCustomization).
  • DisableUserInvocation on SkillCustomization, plus DisableModelInvocation
    and DisableUserInvocation on AgentCustomization.
  • Optional Reviewed field on ChangesetFile. Omitting it (or setting it to
    nil) signals that the server does not support the file "review"
    functionality.
  • changeset/filesReviewedChanged action for servers to update the Reviewed
    flag of one or more changeset files.
  • Optional Meta (wire _meta) provider-metadata field on every customization
    type, moved from AgentCustomization up to the shared customization base so
    PluginCustomization, ClientPluginCustomization, DirectoryCustomization,
    SkillCustomization, PromptCustomization, RuleCustomization,
    HookCustomization, and McpServerCustomization all carry it.
  • Optional ServerInfo on InitializeResult and ClientInfo on
    InitializeParams, each an Implementation struct (Name, optional
    Version, optional Title), identifying the implementation and build behind
    either side of the handshake. Informational only — MUST NOT be used for
    feature detection.
  • Optional TerminalCommandPrefix on InitializeResult for hosts that support
    interpreting !-prefixed user messages as terminal commands.
  • Optional Version field on PluginCustomization (inherited by
    ClientPluginCustomization), carrying the plugin's semver sourced from the
    Open Plugins manifest. Provenance / display only.
  • session/mcpServerStartRequested and session/mcpServerStopRequested
    actions for clients to ask the host to start or stop MCP servers; stopping
    moves an authRequired server to stopped so it no longer waits on
    authentication.
  • InputRequestResponsePart and the ResponsePartKindInputRequest discriminant.
    The reducer now records a resolved input request in the active turn's
    ResponseParts on ChatInputCompletedAction — embedding the resolved
    ChatInputRequest (final Answers) and the Response (accept, decline,
    or cancel) — so the outcome persists after the live request is removed.
    Abandoned requests still record nothing (#324).

Changed

  • The session/customizationToggled reducer now toggles any top-level
    customization (plugin, directory, or top-level mcpServer) or an
    individual child by id, setting that entry's Enabled.

AHP Swift Package v0.5.1

Choose a tag to compare

@github-actions github-actions released this 02 Jul 20:07
1c9acf6

[0.5.1] — 2026-07-02

Implements AHP 0.5.1.

Added

  • Optional nonce field on ContentRef.
  • SubscribeParams.delivery.maxLatencyMs and
    AHPClient.subscribe(_:delivery:) for clients to request a maximum
    subscription delivery latency, including 0 for no intentional coalescing.
  • Optional capabilities field on AgentInfo (AgentCapabilities with a
    nested multipleChats capability carrying fork) so clients gate multi-chat
    and fork via advertised capabilities instead of provider-id switches.
  • Cursor-based pagination for listSessions, via new shared PaginatedParams
    (limit + cursor) and PaginatedResult (nextCursor) types:
    ListSessionsParams and ListSessionsResult now carry these fields, letting
    clients page through a large session catalogue. Fully additive — omitting the
    fields preserves prior behaviour.
  • SubscribeParams.view.turns, ChatState.turnsNextCursor, and the
    chat/turnsLoaded action so clients can subscribe to a bounded tail of chat
    history and page older turns into the reduced chat state on demand.
  • SessionState.inputNeeded — a session-level aggregate of outstanding input
    requests across all chats (SessionInputRequest enum with
    SessionChatInputRequest, SessionToolConfirmationRequest, and
    SessionToolClientExecutionRequest cases), plus the
    StateAction.sessionInputNeededSet / StateAction.sessionInputNeededRemoved
    actions and the ToolCallConfirmationState union. The session reducer
    maintains the SessionStatus.inputNeeded activity bit from the queue,
    clearing it (falling back to .inProgress) when the last entry is removed.
  • Optional intention field on ChatToolCallStartAction and every tool-call
    lifecycle state.
  • Optional model and tools fields on AgentCustomization for a custom
    agent's pinned model and tool allowlist.

Changed

  • fetchTurns now accepts cursor from ChatState.turnsNextCursor and returns
    an empty result after the host has loaded older turns into chat state, instead
    of returning a detached { turns, hasMore } page.
  • Generated clients now advertise only protocol 0.5.1, since the fetchTurns
    contract is not wire-compatible with 0.5.0.

Removed

  • filter field from ListSessionsParams. It was an untyped placeholder with
    no defined semantics; it will return with a concrete shape once session
    filtering/sorting is specified.

Fixed

  • SnapshotState now decodes the chat variant. Its decoder previously never
    attempted ChatState, so chat snapshots failed to decode. Variant
    disambiguation also no longer relies on the removed summary field (a leftover
    from before SessionState was flattened).

AHP Spec v0.5.1

Choose a tag to compare

@github-actions github-actions released this 02 Jul 20:05
1c9acf6

[0.5.1] — 2026-07-02

Spec version: 0.5.1

Added

  • SubscribeParams.delivery.maxLatencyMs for clients to request a maximum
    subscription delivery latency, including 0 for no intentional coalescing.
  • SessionState.inputNeeded — a session-level aggregate of outstanding input
    requests across all chats, so a client can discover and answer elicitations,
    tool confirmations, and client-tool execution requests from the session
    channel without subscribing to individual chats. Each entry
    (SessionChatInputRequest, SessionToolConfirmationRequest,
    SessionToolClientExecutionRequest, unioned as SessionInputRequest) carries
    the owning chat URI plus the identifiers needed to respond.
  • session/inputNeededSet and session/inputNeededRemoved actions for the host
    to upsert and remove SessionState.inputNeeded entries. The session reducer
    sets SessionStatus.InputNeeded while the queue is non-empty and clears it
    (falling back to InProgress) once it empties, preserving orthogonal flags.
  • ToolCallConfirmationState union (ToolCallPendingConfirmationState | ToolCallPendingResultConfirmationState) for the tool call carried by
    SessionToolConfirmationRequest.
  • Optional nonce field on ContentRef.
  • Optional intention field on chat/toolCallStart and every ToolCallState
    variant, providing a human-readable description of what the invocation intends
    to do.
  • Optional model and tools fields on AgentCustomization, giving a custom
    agent's pinned model and tool allowlist a first-class home instead of _meta.
  • Optional capabilities field on AgentInfo (AgentCapabilities with a
    nested multipleChats capability carrying fork) so clients gate multi-chat
    and fork via advertised capabilities instead of provider-id switches.
  • Cursor-based pagination for listSessions, via new shared PaginatedParams
    (limit + cursor) and PaginatedResult (nextCursor) types:
    ListSessionsParams now extends PaginatedParams and ListSessionsResult
    extends PaginatedResult, letting clients fetch a large session catalogue
    incrementally. Fully additive — omitting the fields preserves today's
    behaviour.
  • SubscribeParams.view.turns, ChatState.turnsNextCursor, and the
    chat/turnsLoaded action so clients can subscribe to a bounded tail of chat
    history and page older turns into the reduced chat state on demand.

Changed

  • fetchTurns now accepts cursor from ChatState.turnsNextCursor and returns
    an empty result after the host has loaded older turns into chat state, instead
    of returning a detached { turns, hasMore } page.
  • Generated clients now advertise only protocol 0.5.1, since the fetchTurns
    contract is not wire-compatible with 0.5.0.

Removed

  • filter field from ListSessionsParams. It was an untyped object
    placeholder with no defined semantics; it will be reintroduced with a concrete
    shape once session filtering/sorting is specified.

Go module v0.5.1

Choose a tag to compare

@github-actions github-actions released this 02 Jul 20:07
1c9acf6

[0.5.1] — 2026-07-02

Implements AHP 0.5.1.

Added

  • Optional Nonce field on ContentRef.
  • SubscribeParams.Delivery.MaxLatencyMs and Client.SubscribeWithDelivery
    for clients to request a maximum subscription delivery latency, including
    0 for no intentional coalescing.
  • Optional capabilities field on AgentInfo (AgentCapabilities with a
    nested multipleChats capability carrying fork) so clients gate multi-chat
    and fork via advertised capabilities instead of provider-id switches.
  • Cursor-based pagination for listSessions, via new shared PaginatedParams
    (Limit + Cursor) and PaginatedResult (NextCursor) types:
    ListSessionsParams and ListSessionsResult now carry these fields, letting
    clients page through a large session catalogue. Fully additive — omitting the
    fields preserves prior behaviour.
  • SubscribeParams.View.Turns, ChatState.TurnsNextCursor, and the
    chat/turnsLoaded action so clients can subscribe to a bounded tail of chat
    history and page older turns into the reduced chat state on demand.
  • SessionState.InputNeeded — a session-level aggregate of outstanding input
    requests across all chats (SessionInputRequest union with
    SessionChatInputRequest, SessionToolConfirmationRequest, and
    SessionToolClientExecutionRequest), plus the SessionInputNeededSetAction
    (wire session/inputNeededSet) and SessionInputNeededRemovedAction (wire
    session/inputNeededRemoved) actions and the ToolCallConfirmationState
    union. The session reducer maintains the SessionStatusInputNeeded activity
    bit from the queue, clearing it (falling back to SessionStatusInProgress)
    when the last entry is removed.
  • Optional Intention field on ChatToolCallStartAction and every tool-call
    lifecycle state.
  • Optional Model and Tools fields on AgentCustomization for a custom
    agent's pinned model and tool allowlist.

Changed

  • fetchTurns now accepts Cursor from ChatState.TurnsNextCursor and returns
    an empty result after the host has loaded older turns into chat state, instead
    of returning a detached { turns, hasMore } page.
  • Generated clients now advertise only protocol 0.5.1, since the fetchTurns
    contract is not wire-compatible with 0.5.0.

Removed

  • Filter field from ListSessionsParams. It was an untyped placeholder with
    no defined semantics; it will return with a concrete shape once session
    filtering/sorting is specified.

Fixed

  • SnapshotState.UnmarshalJSON now decodes the Chat variant. Variant
    disambiguation previously probed for the removed summary field (a leftover
    from before SessionState was flattened), so chat and session snapshots both
    fell through to the Root catch-all. Sessions are now matched on lifecycle
    and chats on turns.

AHP Swift Package v0.5.0

Choose a tag to compare

@github-actions github-actions released this 26 Jun 23:23
e793e92

[0.5.0] — 2026-06-26

Implements AHP 0.5.0.

Added

  • ChatActivityChangedAction (StateAction.chatActivityChanged, wire
    chat/activityChanged) for updating a chat's current activity description
    independently of the session summary.
  • ProgressParams struct (wire root/progress) — a generic progress notification
    correlated by a progressToken (added on CreateSessionParams).
    Used today for the lazy first-use download of an agent's native SDK.
  • SessionModelInfo.maxOutputTokens and SessionModelInfo.maxPromptTokens
    optional fields for communicating model token limits.
  • SessionSummary.meta (_meta on the wire) optional provider metadata field
    for lightweight session-list presentation hints.
  • SessionActiveClientRemovedAction (StateAction.sessionActiveClientRemoved,
    wire session/activeClientRemoved) to release a single active client by
    clientId.
  • ChatDraftChangedAction (StateAction.chatDraftChanged, wire
    chat/draftChanged) and ChatState.draft (Message?) to set or clear the
    user's in-progress draft input for a chat. The chat reducer applies it
    without stamping modifiedAt.
  • Message.model and Message.agent optional fields carrying the selection a
    message was composed with.

Changed

  • SessionState.activeClients ([SessionActiveClient], required) replaces the
    single optional SessionState.activeClient; the session reducer upserts and
    removes entries keyed by clientId.
  • StateAction.sessionActiveClientChanged is renamed to
    StateAction.sessionActiveClientSet (wire session/activeClientSet) with
    upsert-by-clientId semantics; it no longer unsets the active client
    (dispatch session/activeClientRemoved instead).
  • ConfigPropertySchema.enum field is now [AnyCodable]? instead of
    [String]?, allowing numeric, boolean, and null enum values.
  • ModelSelection.config values are now AnyCodable instead of String,
    allowing numeric, boolean, and null configuration values.
  • SessionState now inlines the session metadata fields (provider, title,
    status, activity, project, workingDirectory, annotations) directly
    instead of embedding a summary: SessionSummary. The session reducer mutates
    these fields directly and no longer stamps a modifiedAt. SessionSummary
    remains a root-only catalog struct whose createdAt/modifiedAt are now
    ISO-8601 Strings and which no longer carries model/agent.
  • ChatState and ChatSummary no longer carry model/agent.

Removed

  • SessionActiveClientToolsChangedAction. An active client now updates its
    published tools by re-dispatching StateAction.sessionActiveClientSet with its
    full, updated entry.
  • SessionModelChangedAction (StateAction.sessionModelChanged,
    session/modelChanged) and SessionAgentChangedAction
    (StateAction.sessionAgentChanged, session/agentChanged), along with their
    session-reducer handling.