Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- `refactor(llm)`: `OpenAiProvider::generation_params()` private helper extracted; removes 4
duplicate `generation_overrides` tuple expansions in `send_request`, `send_stream_request`,
`debug_request_json`, and `chat_with_tools`. (#4873)
- `build(acp)`: bump `agent-client-protocol` 0.12.1 → 0.14.0 and `agent-client-protocol-schema` = 0.13.6; remove dead `agent-client-protocol-tokio` dependency
- `feat(acp)`: `unstable-session-usage` feature now maps to upstream `unstable_end_turn_token_usage` gate (renamed, not stabilized in 0.14.0)
- `feat(acp)`: `unstable-elicitation` feature now also enables `agent-client-protocol/unstable_elicitation` core passthrough for `elicitation/create` handler wiring
- `refactor(acp)`: provider ext-method types renamed to singular: `SetProvidersRequest/Response` → `SetProviderRequest/Response`, `DisableProvidersRequest/Response` → `DisableProviderRequest/Response`
- `refactor(acp)`: logout, session/close, session/delete, session/resume, and additional-directories handlers are now unconditional (feature flags retained as no-op tombstones for workspace forwarding compatibility)

### Removed

- `refactor(acp)`: `session/set_model` dedicated RPC method removed (deleted upstream in 0.14.0); model switching remains fully available via `session/set_config_option` (config_id="model") and the `$/model` slash command
- `refactor(acp)`: inbound/outbound message-id echo removed (`PromptRequest.message_id` and `PromptResponse.user_message_id` were removed upstream in 0.14.0)

### Fixed

- `refactor(llm)`: `parse_gemini_error` in `zeph-llm` now delegates the base `ApiError` and
`ContextLengthExceeded` construction to `crate::http::map_error_response`, consistent with all
other backends (claude, openai, gonka, cocoon). Gemini-specific `RESOURCE_EXHAUSTED → RateLimited`
handling is preserved. (#4868)
- refactor(memory): remove `ScoredCandidate` single-field wrapper in `tiered_retrieval.rs` ([#4867](https://github.com/bug-ops/zeph/issues/4867))
- fix(memory): replace `.entered()` span guard with removal in `tiered_retrieval.rs` async fn ([#4866](https://github.com/bug-ops/zeph/issues/4866))

### Fixed

- `docs(config)`: `CandleConfig` in `zeph-config` now has a `///` doc comment describing its
purpose (`[llm.candle]` TOML section) and its relationship to `CandleInlineConfig`. (#4869)

Expand Down
79 changes: 10 additions & 69 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 2 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,8 @@ publish = true

[workspace.dependencies]
age = { version = "0.11.3", default-features = false }
agent-client-protocol = "0.12.1"
agent-client-protocol-schema = "0.13.2"
agent-client-protocol-tokio = "0.11.1"
agent-client-protocol = "0.14.0"
agent-client-protocol-schema = "=0.13.6"
anyhow = "1.0.102"
arboard = "3.6.1"
arc-swap = "1.9.1"
Expand Down
21 changes: 11 additions & 10 deletions crates/zeph-acp/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,31 +17,32 @@ default = [
"unstable-session-delete",
"unstable-session-fork",
"unstable-session-usage",
"unstable-session-model",
"unstable-logout",
"unstable-elicitation",
"unstable-llm-providers",
]
acp-http = ["dep:axum", "dep:blake3", "dep:dashmap", "dep:async-stream", "dep:tower-http", "dep:subtle", "dep:tower"]
# session/close is now exposed as session/delete in acp 0.12.1
unstable-session-delete = ["agent-client-protocol/unstable_session_delete"]
# session/close and session/delete stabilized in acp 0.14.0; no upstream feature gate needed
unstable-session-delete = []
unstable-session-fork = ["agent-client-protocol/unstable_session_fork"]
# session/resume is stable in acp 0.12.1; no feature gate needed
unstable-session-resume = []
unstable-session-usage = ["agent-client-protocol/unstable_session_usage"]
unstable-session-model = ["agent-client-protocol/unstable_session_model"]
unstable-elicitation = ["dep:agent-client-protocol-schema", "agent-client-protocol-schema/unstable_elicitation"]
# renamed from unstable_session_usage in acp 0.14.0; Usage struct + PromptResponse.usage remain gated
unstable-session-usage = ["agent-client-protocol/unstable_end_turn_token_usage"]
unstable-elicitation = ["dep:agent-client-protocol-schema", "agent-client-protocol-schema/unstable_elicitation", "agent-client-protocol/unstable_elicitation"]
unstable-llm-providers = ["dep:agent-client-protocol-schema", "agent-client-protocol-schema/unstable_llm_providers"]
unstable-logout = ["agent-client-protocol/unstable_logout"]
# logout stabilized in acp 0.13.0; no upstream feature gate needed
unstable-logout = []
unstable-auth-methods = ["agent-client-protocol/unstable_auth_methods"]
unstable-boolean-config = ["agent-client-protocol/unstable_boolean_config"]
unstable-message-id = ["agent-client-protocol/unstable_message_id"]
unstable-session-add-dirs = ["agent-client-protocol/unstable_session_additional_directories"]
# message-id stabilized in acp 0.14.0; no upstream feature gate needed
unstable-message-id = []
# session-add-dirs stabilized in acp 0.14.0; no upstream feature gate needed
unstable-session-add-dirs = []

[dependencies]
agent-client-protocol = { workspace = true }
agent-client-protocol-schema = { workspace = true, optional = true }
agent-client-protocol-tokio = { workspace = true }
async-stream = { workspace = true, optional = true }
axum = { workspace = true, features = ["ws"], optional = true }
base64.workspace = true
Expand Down
12 changes: 0 additions & 12 deletions crates/zeph-acp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,6 @@ The `initialize` response includes an `auth_hint` key in its metadata map. For s
| `unstable-session-fork` | unstable | Enables the `fork_session` ACP method. See below. |
| `unstable-session-resume` | unstable | Enables the `resume_session` ACP method. See below. |
| `unstable-session-usage` | unstable | Enables `UsageUpdate` events — token counts (input, output, cache) sent to the IDE after each turn. See below. |
| `unstable-session-model` | unstable | Enables `SetSessionModel` — IDE-driven model switching via a native picker without `session/configure`. See below. |
| `unstable-session-info-update` | unstable | Enables `SessionInfoUpdate` — agent-generated session title emitted to the IDE after the first turn. See below. |
| `unstable-elicitation` | unstable | Exposes elicitation schema types (`ElicitationRequest`, etc.) for future agent-loop integration. SDK methods not yet available in 0.10.3. |
| `unstable-logout` | unstable | Enables the `logout` ACP method and advertises `auth.logout` capability. Zeph logout is a no-op (vault-based auth). |
Expand All @@ -379,7 +378,6 @@ zeph-acp = { version = "*", features = [
"unstable-session-fork",
"unstable-session-resume",
"unstable-session-usage",
"unstable-session-model",
"unstable-session-info-update",
"unstable-elicitation",
"unstable-logout",
Expand Down Expand Up @@ -423,16 +421,6 @@ Enables `UsageUpdate` session events. After each agent turn `ZephAcpAgent` emits

The IDE can use this data to display running cost estimates or token budgets without polling a separate endpoint.

### `unstable-session-model`

Enables `SetSessionModel` handling. When the IDE sends a `set_session_model` request (e.g., from a native model-picker dropdown), `ZephAcpAgent`:

1. Resolves the requested `"provider:model"` key via `ProviderFactory`.
2. Stores the resolved provider in the session-scoped `provider_override`.
3. Returns a confirmation to the IDE so the picker reflects the active selection.

This avoids the need to wrap model selection in a `session/configure` call and maps directly to the Zed AI model picker interaction.

### `unstable-session-info-update`

Enables `SessionInfoUpdate` events. After the first completed turn in a new session, `ZephAcpAgent` emits a `SessionUpdate::SessionInfoUpdate` containing a short, LLM-generated title derived from the opening message. The IDE can use this title to label the session in its sidebar or tab bar.
Expand Down
9 changes: 0 additions & 9 deletions crates/zeph-acp/src/agent/handlers/mod.rs
Original file line number Diff line number Diff line change
@@ -1,28 +1,19 @@
// SPDX-FileCopyrightText: 2026 Andrei G <bug-ops>
// SPDX-License-Identifier: MIT OR Apache-2.0

// Handler stubs for ACP 0.11 migration. Implementations land in PR 2 (#3267).
// See .local/plan/acp-migration-plan.md §4 Steps 3–4 for the full contract.

pub(crate) mod authenticate;
pub(crate) mod cancel;
#[cfg(feature = "unstable-session-delete")]
pub(crate) mod close_session;
#[cfg(feature = "unstable-session-delete")]
pub(crate) mod delete_session;
pub(crate) mod dispatch;
#[cfg(feature = "unstable-session-fork")]
pub(crate) mod fork_session;
pub(crate) mod initialize;
pub(crate) mod list_sessions;
pub(crate) mod load_session;
#[cfg(feature = "unstable-logout")]
pub(crate) mod logout;
pub(crate) mod new_session;
pub(crate) mod prompt;
#[cfg(feature = "unstable-session-resume")]
pub(crate) mod resume_session;
pub(crate) mod set_session_config_option;
pub(crate) mod set_session_mode;
#[cfg(feature = "unstable-session-model")]
pub(crate) mod set_session_model;
21 changes: 0 additions & 21 deletions crates/zeph-acp/src/agent/handlers/set_session_model.rs

This file was deleted.

Loading
Loading