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
12 changes: 6 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ jobs:
fail-fast: false
matrix:
include:
- features: "desktop,ide,server,chat,pdf,scheduler,registry,testing,deep-link"
- features: "desktop,ide,server,chat,pdf,scheduler,testing"
label: desktop-ide-server-chat-pdf-scheduler
- features: bench
label: bench
Expand All @@ -182,7 +182,7 @@ jobs:
fail-fast: false
matrix:
include:
- features: "desktop,ide,server,chat,pdf,scheduler,registry,deep-link"
- features: "desktop,ide,server,chat,pdf,scheduler"
label: desktop-ide-server-chat-pdf-scheduler
- features: bench
label: bench
Expand Down Expand Up @@ -226,7 +226,7 @@ jobs:
- name: Build and archive tests
env:
RUSTFLAGS: "-Z threads=4"
run: cargo nextest archive --config-file .github/nextest.toml --cargo-profile ci --workspace --features "desktop,ide,server,chat,pdf,scheduler,registry,deep-link" --lib --bins --tests --archive-file nextest-archive.tar.zst
run: cargo nextest archive --config-file .github/nextest.toml --cargo-profile ci --workspace --features "desktop,ide,server,chat,pdf,scheduler" --lib --bins --tests --archive-file nextest-archive.tar.zst
- name: Upload test archive
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
Expand Down Expand Up @@ -759,7 +759,7 @@ jobs:
# `#![recursion_limit]` fix) because it skips codegen/LTO layout finalization. Only a
# real `cargo build --release` with this workspace's `[profile.release]` (lto = true,
# codegen-units = 1) exercises the same query depth CI is meant to gate on.
run: cargo build --release --workspace --all-targets --features "desktop,ide,server,chat,pdf,scheduler,registry,testing,deep-link"
run: cargo build --release --workspace --all-targets --features "desktop,ide,server,chat,pdf,scheduler,testing"

release-build-full:
name: Release Build Check (full)
Expand Down Expand Up @@ -859,9 +859,9 @@ jobs:
with:
shared-key: "ci"
- name: Build docs (all features except candle)
run: cargo doc --no-deps --workspace --features "desktop,ide,server,chat,pdf,scheduler,registry,deep-link"
run: cargo doc --no-deps --workspace --features "desktop,ide,server,chat,pdf,scheduler"
- name: Doc-tests
run: cargo test --doc --workspace --features "desktop,ide,server,chat,pdf,scheduler,registry,deep-link"
run: cargo test --doc --workspace --features "desktop,ide,server,chat,pdf,scheduler"

validate-specs:
name: Validate Specs
Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
build hit the 30-minute limit and was cancelled — a direct consequence of the sccache removal
above, since a cold `--features full` build (including the heavier candle/ML dependencies) now
compiles from scratch on every release instead of reusing a warm cache.
- **BREAKING**: `full` no longer implies `testing`. Anyone relying on `--features full` for mock
LLM providers must now add `testing` explicitly (`--features full,testing`) (#6747).
- `index` (AST-based code indexing) joins the `desktop` bundle, and therefore `full` — the first
time `full` compiles `zeph-index` in (#6747).

### Removed

- Workspace feature-flag audit: `deep-link`, `cocoon`, `registry`, `zeph-orchestration/llm-planning`,
`zeph-scheduler/daemon`, and six stabilized `zeph-acp/unstable-*` flags (`unstable-boolean-config`,
`unstable-session-delete`, `unstable-session-resume`, `unstable-logout`, `unstable-session-add-dirs`,
`unstable-message-id`) are removed — all gated code is now always-on. `zeph-core/sysinfo` merged
into `zeph-core/profiling`. Three genuinely-empty `default = []` declarations (`zeph-config`,
`zeph-vault`, `zeph-worktree`) removed. `zeph-skills/miner` no longer synthesizes five implicit
`dep:`-less features (`anyhow`, `clap`, `dirs`, `toml`, `tracing-subscriber`) — replaced with
explicit `dep:` prefixes. `cargo metadata` feature count: 184 → 157 (#6747).

### Security

Expand Down
18 changes: 6 additions & 12 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ rand = "0.10.2"
rand_distr = "0.6"
ratatui = "0.30.2"
regex = "1.13.1"
reqwest = { version = "0.13.4", default-features = false }
reqwest = { version = "0.13.4", default-features = false, features = ["query"] }
ripemd = "0.2"
rmcp = "3.1.2"
rubato = "5.0.0"
Expand Down Expand Up @@ -243,20 +243,19 @@ readme = "README.md"
default = ["scheduler", "sqlite"]

# === Use-case bundles ===
desktop = ["tui", "deep-link", "session"]
desktop = ["tui", "session", "index"]
ide = ["acp", "acp-http"]
server = ["gateway", "a2a", "otel", "prometheus", "session"]
chat = ["discord", "slack"]
ml = ["candle", "pdf"]
full = ["desktop", "ide", "server", "chat", "pdf", "scheduler", "classifiers", "profiling", "sandbox", "gonka", "cocoon", "testing", "registry"]
full = ["desktop", "ide", "server", "chat", "pdf", "scheduler", "classifiers", "profiling", "sandbox", "gonka"]
testing = ["zeph-llm/testing"]
sandbox = ["zeph-tools/sandbox"]
bench = ["dep:zeph-bench"]

# === Individual feature flags ===
deep-link = ["zeph-common/deep-link", "zeph-config/deep-link"]
a2a = ["dep:zeph-a2a", "zeph-a2a?/server", "zeph-a2a?/ibct", "zeph-a2a?/card-signing", "zeph-config/card-signing"]
acp = ["dep:zeph-acp", "zeph-acp/unstable-session-delete", "zeph-acp/unstable-session-fork", "zeph-acp/unstable-session-resume", "zeph-acp/unstable-session-usage", "zeph-acp/unstable-elicitation", "zeph-acp/unstable-llm-providers", "zeph-acp/unstable-logout", "zeph-acp/unstable-auth-methods", "zeph-acp/unstable-message-id", "zeph-acp/unstable-session-add-dirs"]
acp = ["dep:zeph-acp", "zeph-acp/unstable-session-fork", "zeph-acp/unstable-session-usage", "zeph-acp/unstable-elicitation", "zeph-acp/unstable-llm-providers", "zeph-acp/unstable-auth-methods"]
acp-http = ["acp", "dep:axum", "zeph-acp/acp-http"]
candle = ["zeph-llm/candle", "zeph-core/candle"]
classifiers = ["candle", "zeph-llm/classifiers", "zeph-sanitizer/classifiers", "zeph-core/classifiers"]
Expand All @@ -267,10 +266,7 @@ discord = ["zeph-channels/discord"]
slack = ["zeph-channels/slack"]
gateway = ["dep:zeph-gateway"]
prometheus = ["gateway", "dep:prometheus-client", "zeph-gateway/prometheus"]
scheduler = ["dep:zeph-scheduler", "dep:blake3", "dep:cron", "dep:schemars", "zeph-core/scheduler", "zeph-scheduler/daemon", "zeph-memory/scheduler"]
# Skill/plugin marketplace discovery (spec-045, #5869): gates zeph-plugins' `marketplace`
# module (skills.sh registry client). CLI args and RegistryConfig parsing always compile.
registry = ["zeph-plugins/registry"]
scheduler = ["dep:zeph-scheduler", "dep:blake3", "dep:cron", "dep:schemars", "zeph-core/scheduler", "zeph-memory/scheduler"]
# Session persistence, event-log replay, and `zeph serve` (spec-068, #5343). Independent of `acp`:
# `acp` gates ACP protocol transports, `session` gates the persistence CLI verbs and `zeph serve`.
# The `zeph-session` crate/agent-loop dual-write is always compiled and config-gated
Expand All @@ -282,7 +278,6 @@ profiling = [
"dep:tracing-chrome",
"dep:sysinfo",
"zeph-core/profiling",
"zeph-core/sysinfo",
"zeph-llm/profiling",
"zeph-memory/profiling",
"zeph-tools/profiling",
Expand All @@ -306,7 +301,6 @@ profiling-pyroscope = ["profiling", "otel", "dep:pprof"]
# cargo build --no-default-features --features full,sqlite
# Or simply `cargo build --features full` to rely on the default sqlite backend.
gonka = ["zeph-llm/gonka", "zeph-core/gonka"]
cocoon = ["zeph-llm/cocoon", "zeph-core/cocoon", "zeph-tui?/cocoon"]
index = ["zeph-core/index"]
sqlite = [
"zeph-db/sqlite",
Expand Down Expand Up @@ -443,7 +437,7 @@ wiremock.workspace = true
zeph-core.workspace = true
zeph-llm = { workspace = true, features = ["testing"] }
zeph-memory.workspace = true
zeph-plugins = { workspace = true, features = ["registry", "mock"] }
zeph-plugins = { workspace = true, features = ["mock"] }
zeph-skills.workspace = true
# Features are declared by the crates that use them, see workspace dependencies

Expand Down
11 changes: 4 additions & 7 deletions book/src/advanced/acp.md
Original file line number Diff line number Diff line change
Expand Up @@ -872,7 +872,6 @@ Each feature adds a standard ACP protocol method or notification to the agent's
|--------------|---------------------------|-------------|
| `unstable-session-list` | `list_sessions` | Enumerate in-memory sessions. Accepts an optional `cwd` filter; returns session ID, working directory, and last-updated timestamp for each matching session. |
| `unstable-session-fork` | `fork_session` | Clone an existing session's persisted event history into a new session and immediately spawn a fresh agent loop from that checkpoint. The source session continues unaffected. |
| `unstable-session-resume` | `resume_session` | Reattach to a session that exists in SQLite but is not currently active in memory. Spawns an agent loop without replaying historical events. Useful for continuing a session after a Zeph restart. |
| `unstable-session-usage` | `UsageUpdate` in `PromptResponse` | Include token consumption data (input tokens, output tokens, cache read/write tokens) in each prompt response. IDEs use this to display per-turn and cumulative cost estimates. |
| `unstable-session-model` | `set_session_model` | Allow the IDE to switch the active LLM model mid-session via a model picker UI. Zeph emits a `SetSessionModel` notification so the IDE can reflect the change immediately. |
| `unstable-session-info-update` | `SessionInfoUpdate` | Zeph automatically generates a short title for the session after the first exchange and emits a `SessionInfoUpdate` notification. IDEs display this as the conversation title in their session list. |
Expand All @@ -881,14 +880,15 @@ The composite flag `acp-unstable` (root crate) enables all six at once.

> **Note:** These features are gated on the `zeph-acp` crate. Each flag also enables the corresponding feature in the `agent-client-protocol` dependency. Stability and wire format are not guaranteed across minor versions until promoted to stable.

> **Note:** `unstable-session-resume` was removed entirely in the 2026-08 feature-flag audit rather than kept as a no-op tombstone — `session/resume` is stabilized upstream and now compiles unconditionally.

### Enabling the features

Enable individual flags:

```bash
cargo build --features unstable-session-list
cargo build --features unstable-session-fork
cargo build --features unstable-session-resume
cargo build --features unstable-session-usage
cargo build --features unstable-session-model
cargo build --features unstable-session-info-update
Expand All @@ -907,7 +907,6 @@ When embedding `zeph-acp` as a library dependency:
zeph-acp = { version = "...", features = [
"unstable-session-list",
"unstable-session-fork",
"unstable-session-resume",
"unstable-session-usage",
"unstable-session-model",
"unstable-session-info-update",
Expand Down Expand Up @@ -963,7 +962,7 @@ The source session remains active and unchanged. Both sessions are independent a

### resume_session

When `unstable-session-resume` is active, the agent advertises `resume` in `session_capabilities`. The IDE can call `resume_session` to reattach to a previously persisted session.
The agent advertises `resume` in `session_capabilities`. The IDE can call `resume_session` to reattach to a previously persisted session.

The resume operation:

Expand Down Expand Up @@ -1438,7 +1437,7 @@ Restrict which filesystem paths an ACP session is allowed to access:
additional_directories = ["/workspace", "/tmp"]
```

Requests to access paths outside this list are rejected at session start. Feature-gated by `unstable-session-add-dirs`.
Requests to access paths outside this list are rejected at session start.

### Auth Methods Configuration

Expand All @@ -1460,8 +1459,6 @@ When enabled, the client's `message_id` from the prompt is echoed back on all st
message_ids_enabled = true
```

Feature-gated by `unstable-message-id`.

### CLI Overrides

All three ACP configuration options can be overridden at runtime:
Expand Down
2 changes: 1 addition & 1 deletion book/src/reference/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,7 @@ discovery_enabled = true # Expose GET /.well-known/acp.json manifest e
available_models = [] # Models advertised to IDE for switching: ["claude:claude-sonnet-5", "ollama:llama3"] (default: [])
additional_directories = [] # Extra workspace directories ACP clients may reference (default: [])
auth_methods = ["agent"] # Auth methods advertised in initialize (currently only "agent" supported) (default: ["agent"])
message_ids_enabled = true # Echo PromptRequest.message_id onto responses (requires unstable-message-id feature) (default: true)
message_ids_enabled = true # Echo PromptRequest.message_id onto responses (default: true)

[acp.model_config]
default_temperature_preset = "balanced" # Default sampling-temperature: "precise" (0.2), "balanced" (0.7), or "creative" (1.0) (default: "balanced")
Expand Down
Loading
Loading