From ea6fae670c4012721fdc02d587b3a46ecdc871c0 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Fri, 31 Jul 2026 14:51:20 -0700 Subject: [PATCH 1/2] release: AHP 0.7.0 --- CHANGELOG.md | 28 ++++++++++++++++- clients/go/CHANGELOG.md | 30 +++++++++++++++++++ clients/go/VERSION | 2 +- clients/go/release-metadata.json | 2 +- clients/kotlin/CHANGELOG.md | 29 ++++++++++++++++++ clients/kotlin/gradle.properties | 2 +- clients/kotlin/release-metadata.json | 2 +- clients/rust/CHANGELOG.md | 30 +++++++++++++++++++ clients/rust/Cargo.lock | 6 ++-- clients/rust/Cargo.toml | 6 ++-- clients/rust/release-metadata.json | 2 +- clients/swift/CHANGELOG.md | 30 +++++++++++++++++++ clients/swift/VERSION | 2 +- clients/swift/release-metadata.json | 2 +- clients/typescript/CHANGELOG.md | 30 +++++++++++++++++++ clients/typescript/package-lock.json | 4 +-- clients/typescript/package.json | 2 +- clients/typescript/release-metadata.json | 2 +- docs/.changes/20260713-side-chats.json | 4 --- .../.changes/20260716-multiroot-sessions.json | 5 ---- .../20260717-go-client-completions.json | 6 ---- .../20260717-rust-client-completions.json | 6 ---- .../20260717-swift-client-completions.json | 6 ---- ...0260717-typescript-client-completions.json | 6 ---- ...260722-chat-discriminated-fork-source.json | 4 --- .../20260722-remove-terminal-complete.json | 5 ---- .../20260722-terminal-completion-data.json | 5 ---- docs/.changes/20260722-terminal-ispty.json | 5 ---- .../20260723-side-chat-selection.json | 4 --- .../20260723-stable-side-chat-turn-refs.json | 5 ---- ...0727-chat-attachment-optional-endturn.json | 4 --- .../20260728-toolcall-ready-metadata.json | 4 --- ...9-remove-resource-encryption-metadata.json | 5 ---- ...0260729-schema-undefined-not-required.json | 5 ---- .../20260730-restore-redacted-auth-docs.json | 4 --- .../20260730-tool-input-content-ref.json | 4 --- 36 files changed, 193 insertions(+), 105 deletions(-) delete mode 100644 docs/.changes/20260713-side-chats.json delete mode 100644 docs/.changes/20260716-multiroot-sessions.json delete mode 100644 docs/.changes/20260717-go-client-completions.json delete mode 100644 docs/.changes/20260717-rust-client-completions.json delete mode 100644 docs/.changes/20260717-swift-client-completions.json delete mode 100644 docs/.changes/20260717-typescript-client-completions.json delete mode 100644 docs/.changes/20260722-chat-discriminated-fork-source.json delete mode 100644 docs/.changes/20260722-remove-terminal-complete.json delete mode 100644 docs/.changes/20260722-terminal-completion-data.json delete mode 100644 docs/.changes/20260722-terminal-ispty.json delete mode 100644 docs/.changes/20260723-side-chat-selection.json delete mode 100644 docs/.changes/20260723-stable-side-chat-turn-refs.json delete mode 100644 docs/.changes/20260727-chat-attachment-optional-endturn.json delete mode 100644 docs/.changes/20260728-toolcall-ready-metadata.json delete mode 100644 docs/.changes/20260729-remove-resource-encryption-metadata.json delete mode 100644 docs/.changes/20260729-schema-undefined-not-required.json delete mode 100644 docs/.changes/20260730-restore-redacted-auth-docs.json delete mode 100644 docs/.changes/20260730-tool-input-content-ref.json diff --git a/CHANGELOG.md b/CHANGELOG.md index f2d98284..8ca599dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,10 +23,36 @@ changes accumulate. Track in-flight protocol changes via PRs touching `NOTIFICATION_INTRODUCED_IN` maps in [`types/version/registry.ts`](types/version/registry.ts). -## [0.7.0] — Unreleased +## [0.7.0] — 2026-07-31 Spec version: `0.7.0` +### Added + +- Capability-gated side chats can start from a chat turn and return bounded chat transcripts as message attachments. +- Multiroot session support: `AgentCapabilities.multipleWorkingDirectories` capability (with `immutablePrimary`, which pins `workingDirectories[0]` as a fixed primary root that clients MUST NOT remove or reorder), `CreateSessionParams.workingDirectories` and `SessionMetadata.workingDirectories` (equal-peer set, mirrored onto `SessionState`/`SessionSummary`), `CreateChatParams.workingDirectories` and `ChatState`/`ChatSummary.workingDirectories` (a subset of the session's set), and the client-dispatchable `session/workingDirectorySet` / `session/workingDirectoryRemoved` and `chat/workingDirectorySet` / `chat/workingDirectoryRemoved` actions for mutating those sets. (#337) +- `result` on `ToolResultTerminalContent` (`exitCode`, `preview`, `truncated`), present once the command exits. (#323) +- Optional `isPty` metadata on `ToolResultTerminalContent` and `TerminalState` indicating whether a terminal resource is PTY-backed. (#322) +- Side-chat sources and origins can now carry an immutable selected-text snapshot with optional response-part provenance. + +### Changed + +- Side-chat sources and origins now carry stable `turnId` references instead of nested active/completed turn snapshots. +- `MessageChatAttachment.endTurn` is optional; hosts pin the latest completed turn when it is omitted, and chat attachments may reference chats in other sessions. +- `chat/toolCallReady` may finalize a tool call's provisional contributor and intention without changing client execution ownership. +- Final tool input may be inline or a lazy `ContentRef`, and streaming deltas may include partial parameters. + +### Removed + +- `ToolResultTerminalCompleteContent`; command completion data now lives on `ToolResultTerminalContent`. (#322, #323) +- Non-standard `resource_encryption_alg_values_supported` and `resource_encryption_enc_values_supported` fields from `ProtectedResourceMetadata`. (#368) + +### Fixed + +- `createChat.source` is once again a fully discriminated union: fork and side-chat sources both require a `kind`, and missing or unknown kinds are rejected. +- JSON Schema no longer marks properties declared as `T | undefined` (`ActionEnvelope.origin`, `Turn.usage`, `ActiveTurn.usage`, `SessionActivityChangedAction.activity`, `SessionMetaChangedAction._meta`, `SessionChangesetsChangedAction.changesets`, `ChangesetOperationsChangedAction.operations`) as `required`. Such properties are absent on the wire and every client emits them as optional, so the published schemas rejected valid protocol traffic. +- Restored authentication documentation in the `authenticate` command and `McpAuthRequirement` that a secret-scanner had redacted, including a corrupted `WWW-Authenticate: Bearer scope="…"` header example. + ## [0.6.0] — 2026-07-20 Spec version: `0.6.0` diff --git a/clients/go/CHANGELOG.md b/clients/go/CHANGELOG.md index 852cb8bc..5b99c93c 100644 --- a/clients/go/CHANGELOG.md +++ b/clients/go/CHANGELOG.md @@ -14,6 +14,36 @@ tag whose matching `## [X.Y.Z]` heading is missing from this file. ## [Unreleased] +## [0.7.0] — 2026-07-31 + +Implements AHP 0.7.0. + +### Added + +- Capability-gated side chats can start from a chat turn and return bounded chat transcripts as message attachments. +- Multiroot session support: `AgentCapabilities.multipleWorkingDirectories` capability (with `immutablePrimary`, which pins `workingDirectories[0]` as a fixed primary root that clients MUST NOT remove or reorder), `CreateSessionParams.workingDirectories` and `SessionMetadata.workingDirectories` (equal-peer set, mirrored onto `SessionState`/`SessionSummary`), `CreateChatParams.workingDirectories` and `ChatState`/`ChatSummary.workingDirectories` (a subset of the session's set), and the client-dispatchable `session/workingDirectorySet` / `session/workingDirectoryRemoved` and `chat/workingDirectorySet` / `chat/workingDirectoryRemoved` actions for mutating those sets. (#337) +- `Client.Completions()` and `Client.SessionConfigCompletions()` typed wrappers for the `completions` / `sessionConfigCompletions` commands, matching the existing `resource*` convenience methods. (#340) +- `result` on `ToolResultTerminalContent` (`exitCode`, `preview`, `truncated`), present once the command exits. (#323) +- Optional `isPty` metadata on `ToolResultTerminalContent` and `TerminalState` indicating whether a terminal resource is PTY-backed. (#322) +- Side-chat sources and origins can now carry an immutable selected-text snapshot with optional response-part provenance. + +### Changed + +- Side-chat sources and origins now carry stable `turnId` references instead of nested active/completed turn snapshots. +- `MessageChatAttachment.endTurn` is optional; hosts pin the latest completed turn when it is omitted, and chat attachments may reference chats in other sessions. +- `chat/toolCallReady` may finalize a tool call's provisional contributor and intention without changing client execution ownership. +- Final tool input may be inline or a lazy `ContentRef`, and streaming deltas may include partial parameters. + +### Removed + +- `ToolResultTerminalCompleteContent`; command completion data now lives on `ToolResultTerminalContent`. (#322, #323) +- Non-standard `resource_encryption_alg_values_supported` and `resource_encryption_enc_values_supported` fields from `ProtectedResourceMetadata`. (#368) + +### Fixed + +- `createChat.source` is once again a fully discriminated union: fork and side-chat sources both require a `kind`, and missing or unknown kinds are rejected. +- Restored authentication documentation in the `authenticate` command and `McpAuthRequirement` that a secret-scanner had redacted, including a corrupted `WWW-Authenticate: Bearer scope="…"` header example. + ## [0.6.0] — 2026-07-20 Implements AHP 0.6.0. diff --git a/clients/go/VERSION b/clients/go/VERSION index a918a2aa..faef31a4 100644 --- a/clients/go/VERSION +++ b/clients/go/VERSION @@ -1 +1 @@ -0.6.0 +0.7.0 diff --git a/clients/go/release-metadata.json b/clients/go/release-metadata.json index f26219c2..c482918f 100644 --- a/clients/go/release-metadata.json +++ b/clients/go/release-metadata.json @@ -1,6 +1,6 @@ { "client": "go", - "packageVersion": "0.6.0", + "packageVersion": "0.7.0", "supportedProtocolVersions": [ "0.7.0", "0.6.0", diff --git a/clients/kotlin/CHANGELOG.md b/clients/kotlin/CHANGELOG.md index c5d3c985..93b97803 100644 --- a/clients/kotlin/CHANGELOG.md +++ b/clients/kotlin/CHANGELOG.md @@ -15,6 +15,35 @@ versions (`*-SNAPSHOT`) are explicitly rejected by the publish pipeline; bump ## [Unreleased] +## [0.7.0] — 2026-07-31 + +Implements AHP 0.7.0. + +### Added + +- Capability-gated side chats can start from a chat turn and return bounded chat transcripts as message attachments. +- Multiroot session support: `AgentCapabilities.multipleWorkingDirectories` capability (with `immutablePrimary`, which pins `workingDirectories[0]` as a fixed primary root that clients MUST NOT remove or reorder), `CreateSessionParams.workingDirectories` and `SessionMetadata.workingDirectories` (equal-peer set, mirrored onto `SessionState`/`SessionSummary`), `CreateChatParams.workingDirectories` and `ChatState`/`ChatSummary.workingDirectories` (a subset of the session's set), and the client-dispatchable `session/workingDirectorySet` / `session/workingDirectoryRemoved` and `chat/workingDirectorySet` / `chat/workingDirectoryRemoved` actions for mutating those sets. (#337) +- `result` on `ToolResultTerminalContent` (`exitCode`, `preview`, `truncated`), present once the command exits. (#323) +- Optional `isPty` metadata on `ToolResultTerminalContent` and `TerminalState` indicating whether a terminal resource is PTY-backed. (#322) +- Side-chat sources and origins can now carry an immutable selected-text snapshot with optional response-part provenance. + +### Changed + +- Side-chat sources and origins now carry stable `turnId` references instead of nested active/completed turn snapshots. +- `MessageChatAttachment.endTurn` is optional; hosts pin the latest completed turn when it is omitted, and chat attachments may reference chats in other sessions. +- `chat/toolCallReady` may finalize a tool call's provisional contributor and intention without changing client execution ownership. +- Final tool input may be inline or a lazy `ContentRef`, and streaming deltas may include partial parameters. + +### Removed + +- `ToolResultTerminalCompleteContent`; command completion data now lives on `ToolResultTerminalContent`. (#322, #323) +- Non-standard `resource_encryption_alg_values_supported` and `resource_encryption_enc_values_supported` fields from `ProtectedResourceMetadata`. (#368) + +### Fixed + +- `createChat.source` is once again a fully discriminated union: fork and side-chat sources both require a `kind`, and missing or unknown kinds are rejected. +- Restored authentication documentation in the `authenticate` command and `McpAuthRequirement` that a secret-scanner had redacted, including a corrupted `WWW-Authenticate: Bearer scope="…"` header example. + ## [0.6.0] — 2026-07-20 Implements AHP 0.6.0. diff --git a/clients/kotlin/gradle.properties b/clients/kotlin/gradle.properties index 69e60813..8a17e011 100644 --- a/clients/kotlin/gradle.properties +++ b/clients/kotlin/gradle.properties @@ -8,7 +8,7 @@ kotlin.code.style=official # Maven coordinates — consumed by build.gradle.kts and validated by the # publish workflow against the `kotlin/v*` git tag. GROUP=com.microsoft.agenthostprotocol -VERSION_NAME=0.6.0 +VERSION_NAME=0.7.0 POM_NAME=agent-host-protocol POM_DESCRIPTION=Kotlin/JVM client for the Agent Host Protocol (AHP) POM_INCEPTION_YEAR=2026 diff --git a/clients/kotlin/release-metadata.json b/clients/kotlin/release-metadata.json index c6669d28..2e26c71f 100644 --- a/clients/kotlin/release-metadata.json +++ b/clients/kotlin/release-metadata.json @@ -1,6 +1,6 @@ { "client": "kotlin", - "packageVersion": "0.6.0", + "packageVersion": "0.7.0", "supportedProtocolVersions": [ "0.7.0", "0.6.0", diff --git a/clients/rust/CHANGELOG.md b/clients/rust/CHANGELOG.md index df452476..25e16414 100644 --- a/clients/rust/CHANGELOG.md +++ b/clients/rust/CHANGELOG.md @@ -15,6 +15,36 @@ matching `## [X.Y.Z]` heading is missing from this file. ## [Unreleased] +## [0.7.0] — 2026-07-31 + +Implements AHP 0.7.0. + +### Added + +- Capability-gated side chats can start from a chat turn and return bounded chat transcripts as message attachments. +- Multiroot session support: `AgentCapabilities.multipleWorkingDirectories` capability (with `immutablePrimary`, which pins `workingDirectories[0]` as a fixed primary root that clients MUST NOT remove or reorder), `CreateSessionParams.workingDirectories` and `SessionMetadata.workingDirectories` (equal-peer set, mirrored onto `SessionState`/`SessionSummary`), `CreateChatParams.workingDirectories` and `ChatState`/`ChatSummary.workingDirectories` (a subset of the session's set), and the client-dispatchable `session/workingDirectorySet` / `session/workingDirectoryRemoved` and `chat/workingDirectorySet` / `chat/workingDirectoryRemoved` actions for mutating those sets. (#337) +- `Client::completions()` and `Client::session_config_completions()` typed wrappers for the `completions` / `sessionConfigCompletions` commands, matching the existing `resource_*` convenience methods. (#340) +- `result` on `ToolResultTerminalContent` (`exitCode`, `preview`, `truncated`), present once the command exits. (#323) +- Optional `isPty` metadata on `ToolResultTerminalContent` and `TerminalState` indicating whether a terminal resource is PTY-backed. (#322) +- Side-chat sources and origins can now carry an immutable selected-text snapshot with optional response-part provenance. + +### Changed + +- Side-chat sources and origins now carry stable `turnId` references instead of nested active/completed turn snapshots. +- `MessageChatAttachment.endTurn` is optional; hosts pin the latest completed turn when it is omitted, and chat attachments may reference chats in other sessions. +- `chat/toolCallReady` may finalize a tool call's provisional contributor and intention without changing client execution ownership. +- Final tool input may be inline or a lazy `ContentRef`, and streaming deltas may include partial parameters. + +### Removed + +- `ToolResultTerminalCompleteContent`; command completion data now lives on `ToolResultTerminalContent`. (#322, #323) +- Non-standard `resource_encryption_alg_values_supported` and `resource_encryption_enc_values_supported` fields from `ProtectedResourceMetadata`. (#368) + +### Fixed + +- `createChat.source` is once again a fully discriminated union: fork and side-chat sources both require a `kind`, and missing or unknown kinds are rejected. +- Restored authentication documentation in the `authenticate` command and `McpAuthRequirement` that a secret-scanner had redacted, including a corrupted `WWW-Authenticate: Bearer scope="…"` header example. + ## [0.6.0] — 2026-07-20 Implements AHP 0.6.0. diff --git a/clients/rust/Cargo.lock b/clients/rust/Cargo.lock index 53ea7b19..b93873b4 100644 --- a/clients/rust/Cargo.lock +++ b/clients/rust/Cargo.lock @@ -4,7 +4,7 @@ version = 3 [[package]] name = "ahp" -version = "0.6.0" +version = "0.7.0" dependencies = [ "ahp-types", "ahp-ws", @@ -18,7 +18,7 @@ dependencies = [ [[package]] name = "ahp-types" -version = "0.6.0" +version = "0.7.0" dependencies = [ "serde", "serde_json", @@ -27,7 +27,7 @@ dependencies = [ [[package]] name = "ahp-ws" -version = "0.6.0" +version = "0.7.0" dependencies = [ "ahp", "futures-util", diff --git a/clients/rust/Cargo.toml b/clients/rust/Cargo.toml index 2d49e8f2..620257d6 100644 --- a/clients/rust/Cargo.toml +++ b/clients/rust/Cargo.toml @@ -7,7 +7,7 @@ members = [ ] [workspace.package] -version = "0.6.0" +version = "0.7.0" edition = "2021" rust-version = "1.75" license = "MIT" @@ -22,5 +22,5 @@ tokio = { version = "1", features = ["sync", "rt", "macros", "time"] } tokio-util = "0.7" futures-util = "0.3" tracing = "0.1" -ahp-types = { path = "crates/ahp-types", version = "0.6.0" } -ahp = { path = "crates/ahp", version = "0.6.0" } +ahp-types = { path = "crates/ahp-types", version = "0.7.0" } +ahp = { path = "crates/ahp", version = "0.7.0" } diff --git a/clients/rust/release-metadata.json b/clients/rust/release-metadata.json index 1fba6f63..1a0645b2 100644 --- a/clients/rust/release-metadata.json +++ b/clients/rust/release-metadata.json @@ -1,6 +1,6 @@ { "client": "rust", - "packageVersion": "0.6.0", + "packageVersion": "0.7.0", "supportedProtocolVersions": [ "0.7.0", "0.6.0", diff --git a/clients/swift/CHANGELOG.md b/clients/swift/CHANGELOG.md index 0d520559..008770d2 100644 --- a/clients/swift/CHANGELOG.md +++ b/clients/swift/CHANGELOG.md @@ -17,6 +17,36 @@ the tag matches the version pinned in [`VERSION`](VERSION). ## [Unreleased] +## [0.7.0] — 2026-07-31 + +Implements AHP 0.7.0. + +### Added + +- Capability-gated side chats can start from a chat turn and return bounded chat transcripts as message attachments. +- Multiroot session support: `AgentCapabilities.multipleWorkingDirectories` capability (with `immutablePrimary`, which pins `workingDirectories[0]` as a fixed primary root that clients MUST NOT remove or reorder), `CreateSessionParams.workingDirectories` and `SessionMetadata.workingDirectories` (equal-peer set, mirrored onto `SessionState`/`SessionSummary`), `CreateChatParams.workingDirectories` and `ChatState`/`ChatSummary.workingDirectories` (a subset of the session's set), and the client-dispatchable `session/workingDirectorySet` / `session/workingDirectoryRemoved` and `chat/workingDirectorySet` / `chat/workingDirectoryRemoved` actions for mutating those sets. (#337) +- `AHPClient.completions()` and `AHPClient.sessionConfigCompletions()` convenience methods, plus `AHPCommands.completions(id:)` / `AHPCommands.sessionConfigCompletions(id:)` request factories, giving the generated `Completions*` / `SessionConfigCompletions*` types a typed entry point. (#340) +- `result` on `ToolResultTerminalContent` (`exitCode`, `preview`, `truncated`), present once the command exits. (#323) +- Optional `isPty` metadata on `ToolResultTerminalContent` and `TerminalState` indicating whether a terminal resource is PTY-backed. (#322) +- Side-chat sources and origins can now carry an immutable selected-text snapshot with optional response-part provenance. + +### Changed + +- Side-chat sources and origins now carry stable `turnId` references instead of nested active/completed turn snapshots. +- `MessageChatAttachment.endTurn` is optional; hosts pin the latest completed turn when it is omitted, and chat attachments may reference chats in other sessions. +- `chat/toolCallReady` may finalize a tool call's provisional contributor and intention without changing client execution ownership. +- Final tool input may be inline or a lazy `ContentRef`, and streaming deltas may include partial parameters. + +### Removed + +- `ToolResultTerminalCompleteContent`; command completion data now lives on `ToolResultTerminalContent`. (#322, #323) +- Non-standard `resource_encryption_alg_values_supported` and `resource_encryption_enc_values_supported` fields from `ProtectedResourceMetadata`. (#368) + +### Fixed + +- `createChat.source` is once again a fully discriminated union: fork and side-chat sources both require a `kind`, and missing or unknown kinds are rejected. +- Restored authentication documentation in the `authenticate` command and `McpAuthRequirement` that a secret-scanner had redacted, including a corrupted `WWW-Authenticate: Bearer scope="…"` header example. + ## [0.6.0] — 2026-07-20 Implements AHP 0.6.0. diff --git a/clients/swift/VERSION b/clients/swift/VERSION index a918a2aa..faef31a4 100644 --- a/clients/swift/VERSION +++ b/clients/swift/VERSION @@ -1 +1 @@ -0.6.0 +0.7.0 diff --git a/clients/swift/release-metadata.json b/clients/swift/release-metadata.json index 7aa7042b..bf954fea 100644 --- a/clients/swift/release-metadata.json +++ b/clients/swift/release-metadata.json @@ -1,6 +1,6 @@ { "client": "swift", - "packageVersion": "0.6.0", + "packageVersion": "0.7.0", "supportedProtocolVersions": [ "0.7.0", "0.6.0", diff --git a/clients/typescript/CHANGELOG.md b/clients/typescript/CHANGELOG.md index 17e547e3..8f82009f 100644 --- a/clients/typescript/CHANGELOG.md +++ b/clients/typescript/CHANGELOG.md @@ -20,6 +20,36 @@ hotfix escape hatch. ## [Unreleased] +## [0.7.0] — 2026-07-31 + +Implements AHP 0.7.0. + +### Added + +- Capability-gated side chats can start from a chat turn and return bounded chat transcripts as message attachments. +- Multiroot session support: `AgentCapabilities.multipleWorkingDirectories` capability (with `immutablePrimary`, which pins `workingDirectories[0]` as a fixed primary root that clients MUST NOT remove or reorder), `CreateSessionParams.workingDirectories` and `SessionMetadata.workingDirectories` (equal-peer set, mirrored onto `SessionState`/`SessionSummary`), `CreateChatParams.workingDirectories` and `ChatState`/`ChatSummary.workingDirectories` (a subset of the session's set), and the client-dispatchable `session/workingDirectorySet` / `session/workingDirectoryRemoved` and `chat/workingDirectorySet` / `chat/workingDirectoryRemoved` actions for mutating those sets. (#337) +- `AhpClient.completions()` and `AhpClient.sessionConfigCompletions()` typed wrappers for the `completions` / `sessionConfigCompletions` commands, matching the existing `resource*` convenience methods. (#340) +- `result` on `ToolResultTerminalContent` (`exitCode`, `preview`, `truncated`), present once the command exits. (#323) +- Optional `isPty` metadata on `ToolResultTerminalContent` and `TerminalState` indicating whether a terminal resource is PTY-backed. (#322) +- Side-chat sources and origins can now carry an immutable selected-text snapshot with optional response-part provenance. + +### Changed + +- Side-chat sources and origins now carry stable `turnId` references instead of nested active/completed turn snapshots. +- `MessageChatAttachment.endTurn` is optional; hosts pin the latest completed turn when it is omitted, and chat attachments may reference chats in other sessions. +- `chat/toolCallReady` may finalize a tool call's provisional contributor and intention without changing client execution ownership. +- Final tool input may be inline or a lazy `ContentRef`, and streaming deltas may include partial parameters. + +### Removed + +- `ToolResultTerminalCompleteContent`; command completion data now lives on `ToolResultTerminalContent`. (#322, #323) +- Non-standard `resource_encryption_alg_values_supported` and `resource_encryption_enc_values_supported` fields from `ProtectedResourceMetadata`. (#368) + +### Fixed + +- `createChat.source` is once again a fully discriminated union: fork and side-chat sources both require a `kind`, and missing or unknown kinds are rejected. +- Restored authentication documentation in the `authenticate` command and `McpAuthRequirement` that a secret-scanner had redacted, including a corrupted `WWW-Authenticate: Bearer scope="…"` header example. + ## [0.6.0] — 2026-07-20 Implements AHP 0.6.0. diff --git a/clients/typescript/package-lock.json b/clients/typescript/package-lock.json index 4a4ed213..a9058128 100644 --- a/clients/typescript/package-lock.json +++ b/clients/typescript/package-lock.json @@ -1,12 +1,12 @@ { "name": "@microsoft/agent-host-protocol", - "version": "0.6.0", + "version": "0.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@microsoft/agent-host-protocol", - "version": "0.6.0", + "version": "0.7.0", "license": "MIT", "devDependencies": { "@types/node": "^22.10.0", diff --git a/clients/typescript/package.json b/clients/typescript/package.json index 9cc5f3a2..8c61e9f1 100644 --- a/clients/typescript/package.json +++ b/clients/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/agent-host-protocol", - "version": "0.6.0", + "version": "0.7.0", "description": "TypeScript client for the Agent Host Protocol (AHP).", "type": "module", "license": "MIT", diff --git a/clients/typescript/release-metadata.json b/clients/typescript/release-metadata.json index 37c6ac0b..b9e932e8 100644 --- a/clients/typescript/release-metadata.json +++ b/clients/typescript/release-metadata.json @@ -1,6 +1,6 @@ { "client": "typescript", - "packageVersion": "0.6.0", + "packageVersion": "0.7.0", "supportedProtocolVersions": [ "0.7.0", "0.6.0", diff --git a/docs/.changes/20260713-side-chats.json b/docs/.changes/20260713-side-chats.json deleted file mode 100644 index 5b6faa5a..00000000 --- a/docs/.changes/20260713-side-chats.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "added", - "message": "Capability-gated side chats can start from a chat turn and return bounded chat transcripts as message attachments." -} diff --git a/docs/.changes/20260716-multiroot-sessions.json b/docs/.changes/20260716-multiroot-sessions.json deleted file mode 100644 index 627ede38..00000000 --- a/docs/.changes/20260716-multiroot-sessions.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "added", - "message": "Multiroot session support: `AgentCapabilities.multipleWorkingDirectories` capability (with `immutablePrimary`, which pins `workingDirectories[0]` as a fixed primary root that clients MUST NOT remove or reorder), `CreateSessionParams.workingDirectories` and `SessionMetadata.workingDirectories` (equal-peer set, mirrored onto `SessionState`/`SessionSummary`), `CreateChatParams.workingDirectories` and `ChatState`/`ChatSummary.workingDirectories` (a subset of the session's set), and the client-dispatchable `session/workingDirectorySet` / `session/workingDirectoryRemoved` and `chat/workingDirectorySet` / `chat/workingDirectoryRemoved` actions for mutating those sets.", - "issues": [337] -} diff --git a/docs/.changes/20260717-go-client-completions.json b/docs/.changes/20260717-go-client-completions.json deleted file mode 100644 index 7b532a0a..00000000 --- a/docs/.changes/20260717-go-client-completions.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "added", - "message": "`Client.Completions()` and `Client.SessionConfigCompletions()` typed wrappers for the `completions` / `sessionConfigCompletions` commands, matching the existing `resource*` convenience methods.", - "targets": ["go"], - "issues": [340] -} diff --git a/docs/.changes/20260717-rust-client-completions.json b/docs/.changes/20260717-rust-client-completions.json deleted file mode 100644 index 4a0078ed..00000000 --- a/docs/.changes/20260717-rust-client-completions.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "added", - "message": "`Client::completions()` and `Client::session_config_completions()` typed wrappers for the `completions` / `sessionConfigCompletions` commands, matching the existing `resource_*` convenience methods.", - "targets": ["rust"], - "issues": [340] -} diff --git a/docs/.changes/20260717-swift-client-completions.json b/docs/.changes/20260717-swift-client-completions.json deleted file mode 100644 index f331ea5d..00000000 --- a/docs/.changes/20260717-swift-client-completions.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "added", - "message": "`AHPClient.completions()` and `AHPClient.sessionConfigCompletions()` convenience methods, plus `AHPCommands.completions(id:)` / `AHPCommands.sessionConfigCompletions(id:)` request factories, giving the generated `Completions*` / `SessionConfigCompletions*` types a typed entry point.", - "targets": ["swift"], - "issues": [340] -} diff --git a/docs/.changes/20260717-typescript-client-completions.json b/docs/.changes/20260717-typescript-client-completions.json deleted file mode 100644 index 8d4266d2..00000000 --- a/docs/.changes/20260717-typescript-client-completions.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "added", - "message": "`AhpClient.completions()` and `AhpClient.sessionConfigCompletions()` typed wrappers for the `completions` / `sessionConfigCompletions` commands, matching the existing `resource*` convenience methods.", - "targets": ["typescript"], - "issues": [340] -} diff --git a/docs/.changes/20260722-chat-discriminated-fork-source.json b/docs/.changes/20260722-chat-discriminated-fork-source.json deleted file mode 100644 index d6dc8187..00000000 --- a/docs/.changes/20260722-chat-discriminated-fork-source.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "fixed", - "message": "`createChat.source` is once again a fully discriminated union: fork and side-chat sources both require a `kind`, and missing or unknown kinds are rejected." -} diff --git a/docs/.changes/20260722-remove-terminal-complete.json b/docs/.changes/20260722-remove-terminal-complete.json deleted file mode 100644 index 89ff1ecf..00000000 --- a/docs/.changes/20260722-remove-terminal-complete.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "removed", - "message": "`ToolResultTerminalCompleteContent`; command completion data now lives on `ToolResultTerminalContent`.", - "issues": [322, 323] -} diff --git a/docs/.changes/20260722-terminal-completion-data.json b/docs/.changes/20260722-terminal-completion-data.json deleted file mode 100644 index 7b2da8b8..00000000 --- a/docs/.changes/20260722-terminal-completion-data.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "added", - "message": "`result` on `ToolResultTerminalContent` (`exitCode`, `preview`, `truncated`), present once the command exits.", - "issues": [323] -} diff --git a/docs/.changes/20260722-terminal-ispty.json b/docs/.changes/20260722-terminal-ispty.json deleted file mode 100644 index 51956e39..00000000 --- a/docs/.changes/20260722-terminal-ispty.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "added", - "message": "Optional `isPty` metadata on `ToolResultTerminalContent` and `TerminalState` indicating whether a terminal resource is PTY-backed.", - "issues": [322] -} diff --git a/docs/.changes/20260723-side-chat-selection.json b/docs/.changes/20260723-side-chat-selection.json deleted file mode 100644 index b84a9518..00000000 --- a/docs/.changes/20260723-side-chat-selection.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "added", - "message": "Side-chat sources and origins can now carry an immutable selected-text snapshot with optional response-part provenance." -} diff --git a/docs/.changes/20260723-stable-side-chat-turn-refs.json b/docs/.changes/20260723-stable-side-chat-turn-refs.json deleted file mode 100644 index 31bfe6b4..00000000 --- a/docs/.changes/20260723-stable-side-chat-turn-refs.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "changed", - "message": "Side-chat sources and origins now carry stable `turnId` references instead of nested active/completed turn snapshots.", - "targets": ["spec", "rust", "kotlin", "typescript", "swift", "go"] -} diff --git a/docs/.changes/20260727-chat-attachment-optional-endturn.json b/docs/.changes/20260727-chat-attachment-optional-endturn.json deleted file mode 100644 index debc3534..00000000 --- a/docs/.changes/20260727-chat-attachment-optional-endturn.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "changed", - "message": "`MessageChatAttachment.endTurn` is optional; hosts pin the latest completed turn when it is omitted, and chat attachments may reference chats in other sessions." -} diff --git a/docs/.changes/20260728-toolcall-ready-metadata.json b/docs/.changes/20260728-toolcall-ready-metadata.json deleted file mode 100644 index 6761d96a..00000000 --- a/docs/.changes/20260728-toolcall-ready-metadata.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "changed", - "message": "`chat/toolCallReady` may finalize a tool call's provisional contributor and intention without changing client execution ownership." -} diff --git a/docs/.changes/20260729-remove-resource-encryption-metadata.json b/docs/.changes/20260729-remove-resource-encryption-metadata.json deleted file mode 100644 index 1a3abfa2..00000000 --- a/docs/.changes/20260729-remove-resource-encryption-metadata.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "removed", - "message": "Non-standard `resource_encryption_alg_values_supported` and `resource_encryption_enc_values_supported` fields from `ProtectedResourceMetadata`.", - "issues": [368] -} diff --git a/docs/.changes/20260729-schema-undefined-not-required.json b/docs/.changes/20260729-schema-undefined-not-required.json deleted file mode 100644 index 34a9ac4c..00000000 --- a/docs/.changes/20260729-schema-undefined-not-required.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "fixed", - "message": "JSON Schema no longer marks properties declared as `T | undefined` (`ActionEnvelope.origin`, `Turn.usage`, `ActiveTurn.usage`, `SessionActivityChangedAction.activity`, `SessionMetaChangedAction._meta`, `SessionChangesetsChangedAction.changesets`, `ChangesetOperationsChangedAction.operations`) as `required`. Such properties are absent on the wire and every client emits them as optional, so the published schemas rejected valid protocol traffic.", - "targets": ["spec"] -} diff --git a/docs/.changes/20260730-restore-redacted-auth-docs.json b/docs/.changes/20260730-restore-redacted-auth-docs.json deleted file mode 100644 index 28901498..00000000 --- a/docs/.changes/20260730-restore-redacted-auth-docs.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "fixed", - "message": "Restored authentication documentation in the `authenticate` command and `McpAuthRequirement` that a secret-scanner had redacted, including a corrupted `WWW-Authenticate: Bearer scope=\"…\"` header example." -} diff --git a/docs/.changes/20260730-tool-input-content-ref.json b/docs/.changes/20260730-tool-input-content-ref.json deleted file mode 100644 index 81e9d255..00000000 --- a/docs/.changes/20260730-tool-input-content-ref.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "changed", - "message": "Final tool input may be inline or a lazy `ContentRef`, and streaming deltas may include partial parameters." -} From ee1182ad6df09a6decb5f4988cfa74c0312be2b5 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Fri, 31 Jul 2026 14:52:14 -0700 Subject: [PATCH 2/2] chore: bump PROTOCOL_VERSION to 0.8.0 for ongoing development --- CHANGELOG.md | 4 ++++ clients/go/ahptypes/version.generated.go | 3 ++- clients/go/release-metadata.json | 1 + clients/kotlin/release-metadata.json | 1 + .../agenthostprotocol/generated/Version.generated.kt | 3 ++- clients/rust/crates/ahp-types/src/version.rs | 4 ++-- clients/rust/release-metadata.json | 1 + .../AgentHostProtocol/Generated/Version.generated.swift | 3 ++- clients/swift/release-metadata.json | 1 + clients/typescript/release-metadata.json | 1 + types/version/registry.ts | 3 ++- 11 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ca599dd..83216124 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,10 @@ changes accumulate. Track in-flight protocol changes via PRs touching `NOTIFICATION_INTRODUCED_IN` maps in [`types/version/registry.ts`](types/version/registry.ts). +## [0.8.0] — Unreleased + +Spec version: `0.8.0` + ## [0.7.0] — 2026-07-31 Spec version: `0.7.0` diff --git a/clients/go/ahptypes/version.generated.go b/clients/go/ahptypes/version.generated.go index 05886990..bb8e8632 100644 --- a/clients/go/ahptypes/version.generated.go +++ b/clients/go/ahptypes/version.generated.go @@ -6,12 +6,13 @@ package ahptypes // ProtocolVersion is the current protocol version (SemVer // MAJOR.MINOR.PATCH) that this generated source speaks. -const ProtocolVersion = "0.7.0" +const ProtocolVersion = "0.8.0" // supportedProtocolVersions backs [SupportedProtocolVersions] — held // in an unexported slice so callers cannot accidentally mutate the // shared backing array. var supportedProtocolVersions = []string{ + "0.8.0", "0.7.0", "0.6.0", "0.5.2", diff --git a/clients/go/release-metadata.json b/clients/go/release-metadata.json index c482918f..a2f19803 100644 --- a/clients/go/release-metadata.json +++ b/clients/go/release-metadata.json @@ -2,6 +2,7 @@ "client": "go", "packageVersion": "0.7.0", "supportedProtocolVersions": [ + "0.8.0", "0.7.0", "0.6.0", "0.5.2", diff --git a/clients/kotlin/release-metadata.json b/clients/kotlin/release-metadata.json index 2e26c71f..6c10af7d 100644 --- a/clients/kotlin/release-metadata.json +++ b/clients/kotlin/release-metadata.json @@ -2,6 +2,7 @@ "client": "kotlin", "packageVersion": "0.7.0", "supportedProtocolVersions": [ + "0.8.0", "0.7.0", "0.6.0", "0.5.2", diff --git a/clients/kotlin/src/main/kotlin/com/microsoft/agenthostprotocol/generated/Version.generated.kt b/clients/kotlin/src/main/kotlin/com/microsoft/agenthostprotocol/generated/Version.generated.kt index bab670ef..eefb56c2 100644 --- a/clients/kotlin/src/main/kotlin/com/microsoft/agenthostprotocol/generated/Version.generated.kt +++ b/clients/kotlin/src/main/kotlin/com/microsoft/agenthostprotocol/generated/Version.generated.kt @@ -5,7 +5,7 @@ package com.microsoft.agenthostprotocol.generated /** * Current protocol version (SemVer `MAJOR.MINOR.PATCH`). */ -public const val PROTOCOL_VERSION: String = "0.7.0" +public const val PROTOCOL_VERSION: String = "0.8.0" /** * Every protocol version this library is willing to negotiate, ordered @@ -16,6 +16,7 @@ public const val PROTOCOL_VERSION: String = "0.7.0" * protocol versions if the host doesn't accept the newest one. */ public val SUPPORTED_PROTOCOL_VERSIONS: List = listOf( + "0.8.0", "0.7.0", "0.6.0", "0.5.2", diff --git a/clients/rust/crates/ahp-types/src/version.rs b/clients/rust/crates/ahp-types/src/version.rs index d05243be..050cce9f 100644 --- a/clients/rust/crates/ahp-types/src/version.rs +++ b/clients/rust/crates/ahp-types/src/version.rs @@ -5,7 +5,7 @@ #![allow(missing_docs)] /// Current protocol version (SemVer `MAJOR.MINOR.PATCH`). -pub const PROTOCOL_VERSION: &str = "0.7.0"; +pub const PROTOCOL_VERSION: &str = "0.8.0"; /// Every protocol version this crate is willing to negotiate, ordered /// most-preferred-first. The first entry equals [`PROTOCOL_VERSION`]. @@ -13,4 +13,4 @@ pub const PROTOCOL_VERSION: &str = "0.7.0"; /// Consumers building `InitializeParams` should pass this slice (or a /// derived `Vec`) so the same client binary can fall back to /// older protocol versions if the host doesn't accept the newest one. -pub const SUPPORTED_PROTOCOL_VERSIONS: &[&str] = &["0.7.0", "0.6.0", "0.5.2", "0.5.1"]; +pub const SUPPORTED_PROTOCOL_VERSIONS: &[&str] = &["0.8.0", "0.7.0", "0.6.0", "0.5.2", "0.5.1"]; diff --git a/clients/rust/release-metadata.json b/clients/rust/release-metadata.json index 1a0645b2..a78990f9 100644 --- a/clients/rust/release-metadata.json +++ b/clients/rust/release-metadata.json @@ -2,6 +2,7 @@ "client": "rust", "packageVersion": "0.7.0", "supportedProtocolVersions": [ + "0.8.0", "0.7.0", "0.6.0", "0.5.2", diff --git a/clients/swift/AgentHostProtocol/Sources/AgentHostProtocol/Generated/Version.generated.swift b/clients/swift/AgentHostProtocol/Sources/AgentHostProtocol/Generated/Version.generated.swift index e925c586..c63a2b59 100644 --- a/clients/swift/AgentHostProtocol/Sources/AgentHostProtocol/Generated/Version.generated.swift +++ b/clients/swift/AgentHostProtocol/Sources/AgentHostProtocol/Generated/Version.generated.swift @@ -3,7 +3,7 @@ import Foundation /// Current protocol version (SemVer `MAJOR.MINOR.PATCH`). -public let PROTOCOL_VERSION: String = "0.7.0" +public let PROTOCOL_VERSION: String = "0.8.0" /// Every protocol version this package is willing to negotiate, /// ordered most-preferred-first. The first entry equals @@ -13,6 +13,7 @@ public let PROTOCOL_VERSION: String = "0.7.0" /// `InitializeParams` so the same client binary can fall back to older /// protocol versions if the host doesn't accept the newest one. public let SUPPORTED_PROTOCOL_VERSIONS: [String] = [ + "0.8.0", "0.7.0", "0.6.0", "0.5.2", diff --git a/clients/swift/release-metadata.json b/clients/swift/release-metadata.json index bf954fea..733b6299 100644 --- a/clients/swift/release-metadata.json +++ b/clients/swift/release-metadata.json @@ -2,6 +2,7 @@ "client": "swift", "packageVersion": "0.7.0", "supportedProtocolVersions": [ + "0.8.0", "0.7.0", "0.6.0", "0.5.2", diff --git a/clients/typescript/release-metadata.json b/clients/typescript/release-metadata.json index b9e932e8..1ca9991c 100644 --- a/clients/typescript/release-metadata.json +++ b/clients/typescript/release-metadata.json @@ -2,6 +2,7 @@ "client": "typescript", "packageVersion": "0.7.0", "supportedProtocolVersions": [ + "0.8.0", "0.7.0", "0.6.0", "0.5.2", diff --git a/types/version/registry.ts b/types/version/registry.ts index e2ea8314..205e00e8 100644 --- a/types/version/registry.ts +++ b/types/version/registry.ts @@ -15,7 +15,7 @@ import type { ServerNotificationMap } from '../messages.js'; * * Formatted as a [SemVer](https://semver.org) `MAJOR.MINOR.PATCH` string. */ -export const PROTOCOL_VERSION = '0.7.0'; +export const PROTOCOL_VERSION = '0.8.0'; /** * Every protocol version a client built from this source tree is willing @@ -34,6 +34,7 @@ export const PROTOCOL_VERSION = '0.7.0'; * `scripts/verify-release-metadata.ts`. */ export const SUPPORTED_PROTOCOL_VERSIONS: readonly string[] = Object.freeze([ + '0.8.0', '0.7.0', '0.6.0', '0.5.2',