v0.5.0

microsoft/agent-host-protocolv0.5.0Jun 26, 2026by github-actions[bot]

Upgrading?

Release notes summary

Implements AHP 0.5.0, a major update introducing multi-client session support, progress notifications, and a flattened `SessionState` structure.

Key Highlights

  • `SessionState.activeClients` array replaces the single `activeClient`.
  • Generic `root/progress` notifications correlated by `progressToken`.
  • Session metadata fields inlined directly into `SessionState`.

Breaking Changes

  • Removed `SessionState.activeClient` (singular).
  • Flattened `SessionState` structure (inlined metadata).
  • Removed `SessionActiveClientToolsChangedAction`.
  • Renamed `session/activeClientChanged` to `session/activeClientSet`.

New Features

  • Optional `maxOutputTokens` and `maxPromptTokens` on `SessionModelInfo`.
  • New `ChatActivityChangedAction` for independent activity updates.
  • Optional `model` and `agent` fields on `Message`.

Full Release Notes

## [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 `String`s 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.

Related Repositories