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
36 changes: 17 additions & 19 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
name: CI

# `toolchain:` is pinned to "1.97" (matches root Cargo.toml's rust-version) across every
# `toolchain:` is pinned to "1.98" (matches root Cargo.toml's rust-version) across every
# job below, rather than a rolling `stable`. dtolnay/rust-toolchain@stable with an
# unpinned toolchain floats to whatever the latest stable release is at run time; Rust
# 1.98.0 introduced new clippy lints (clippy::unused_async_trait_impl,
# clippy::chunks_exact_to_as_chunks) that broke this workflow on ~105 pre-existing call
# sites the moment CI first ran on it, unrelated to whatever PR happened to trigger that
# run. Pin stays until the pre-existing lint violations are cleaned up (#6746); bump
# deliberately alongside that cleanup, not as a side effect of a rolling toolchain.
# unpinned toolchain floats to whatever the latest stable release is at run time, which
# has previously broken CI the moment a new clippy lint landed unrelated to whatever PR
# triggered the run (#6746). Bump the pin deliberately alongside a cleanup pass for any
# new lints the target version introduces, not as a side effect of a rolling toolchain.

on:
push:
Expand Down Expand Up @@ -164,7 +162,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
components: clippy
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
Expand All @@ -173,7 +171,7 @@ jobs:
run: cargo clippy --profile ci --workspace --all-targets --features ${{ matrix.features }} -- -D warnings

msrv:
name: MSRV check (1.97, ${{ matrix.label }})
name: MSRV check (1.98, ${{ matrix.label }})
needs: detect-changes
if: needs.detect-changes.outputs.run-full-ci == 'true'
runs-on: ubuntu-latest
Expand All @@ -190,7 +188,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
shared-key: "msrv-${{ matrix.label }}"
Expand Down Expand Up @@ -260,7 +258,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
cache-targets: "false"
Expand Down Expand Up @@ -495,7 +493,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
cache-targets: "false"
Expand Down Expand Up @@ -575,7 +573,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
shared-key: "ci"
Expand Down Expand Up @@ -607,7 +605,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
shared-key: "ci"
Expand Down Expand Up @@ -714,7 +712,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
shared-key: "ci"
Expand Down Expand Up @@ -747,7 +745,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
cache-targets: "false"
Expand All @@ -774,7 +772,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
cache-targets: "false"
Expand All @@ -798,7 +796,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
shared-key: "ci"
Expand Down Expand Up @@ -854,7 +852,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
toolchain: "1.97"
toolchain: "1.98"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2
with:
shared-key: "ci"
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ All feature and system specifications live in `specs/`. **Compliance is non-nego
Path-specific instructions for GitHub Copilot live in `.github/instructions/*.instructions.md` with `applyTo` frontmatter.

- Use `cargo nextest run` as the default test runner.
- Keep Rust changes compatible with Edition 2024 and MSRV `1.97`.
- Keep Rust changes compatible with Edition 2024 and MSRV `1.98`.
- Prefer zero-warning `clippy`; avoid `unwrap`/`expect` in production code when proper error propagation is possible.
- Any user-facing change must update relevant docs, config defaults, and `CHANGELOG.md` (`[Unreleased]` section).
- For new functionality, provide all integration points: config section, CLI subcommand/argument, TUI command palette entry, `--init` wizard, `--migrate-config` migration step, live testing playbook in `.local/testing/playbooks/`, and coverage row in `.local/testing/coverage-status.md`.
Expand Down Expand Up @@ -69,7 +69,7 @@ All secrets and API keys are stored exclusively in the Zeph age vault. Never use
- `cargo llvm-cov --all-features --workspace`: Generate coverage locally.

## Coding Style & Naming Conventions
Use Rust 2024 edition and MSRV `1.97`. Follow `rustfmt` defaults (4-space indentation) and keep Clippy warnings at zero where practical.
Use Rust 2024 edition and MSRV `1.98`. Follow `rustfmt` defaults (4-space indentation) and keep Clippy warnings at zero where practical.
Use `snake_case` for functions/modules/files, `PascalCase` for types/traits, and `SCREAMING_SNAKE_CASE` for constants. Prefer small modules with explicit responsibilities; keep public APIs in `lib.rs` minimal and re-export intentionally.

## Testing Guidelines
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

### Changed

- Raised the workspace MSRV to Rust 1.98 and resolved the new `clippy::unused_async_trait_impl` /
`clippy::chunks_exact_to_as_chunks` lints introduced by it (#6746, #6748).
- `release.yml`: removed `Swatinem/rust-cache` and `sccache` from the `build-binaries` job.
Release builds only run on `v*` tag push, infrequently enough that any cache entry written
by the previous release has almost certainly been evicted from the shared 10 GiB GHA cache
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ resolver = "3"

[workspace.package]
edition = "2024"
rust-version = "1.97"
rust-version = "1.98"
version = "0.22.4"
authors = ["bug-ops"]
license = "MIT OR Apache-2.0"
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
[![docs](https://img.shields.io/badge/docs-book-blue)](https://bug-ops.github.io/zeph/)
[![CI](https://img.shields.io/github/actions/workflow/status/bug-ops/zeph/ci.yml?branch=main&label=CI)](https://github.com/bug-ops/zeph/actions)
[![codecov](https://codecov.io/gh/bug-ops/zeph/graph/badge.svg?token=S5O0GR9U6G)](https://codecov.io/gh/bug-ops/zeph)
[![MSRV](https://img.shields.io/badge/MSRV-1.97-blue)](https://www.rust-lang.org)
[![MSRV](https://img.shields.io/badge/MSRV-1.98-blue)](https://www.rust-lang.org)
[![Tests](https://img.shields.io/badge/tests-15609-brightgreen)](https://github.com/bug-ops/zeph/actions)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-yellow.svg)](LICENSE)
</div>
Expand Down Expand Up @@ -246,7 +246,7 @@ cd zeph && cargo build --release --features full
Builds run only what you need via [feature bundles](https://bug-ops.github.io/zeph/reference/feature-flags.html): `desktop` (TUI), `ide` (ACP), `server` (gateway + A2A + telemetry), `chat` (Discord + Slack), `ml` (Candle + PDF), or `full`. Cross-platform: Linux, macOS, Windows on x86_64 and ARM64.

> [!IMPORTANT]
> Building from source requires Rust 1.97 or later. Pre-built binaries do not need a toolchain.
> Building from source requires Rust 1.98 or later. Pre-built binaries do not need a toolchain.

## Common commands

Expand Down
2 changes: 1 addition & 1 deletion crates/zeph-a2a/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![Crates.io](https://img.shields.io/crates/v/zeph-a2a)](https://crates.io/crates/zeph-a2a)
[![docs.rs](https://img.shields.io/docsrs/zeph-a2a)](https://docs.rs/zeph-a2a)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-yellow.svg)](../../LICENSE)
[![MSRV](https://img.shields.io/badge/MSRV-1.97-blue)](https://www.rust-lang.org)
[![MSRV](https://img.shields.io/badge/MSRV-1.98-blue)](https://www.rust-lang.org)

A2A protocol client and server with agent discovery for Zeph.

Expand Down
4 changes: 2 additions & 2 deletions crates/zeph-acp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![Crates.io](https://img.shields.io/crates/v/zeph-acp)](https://crates.io/crates/zeph-acp)
[![docs.rs](https://img.shields.io/docsrs/zeph-acp)](https://docs.rs/zeph-acp)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-yellow.svg)](../../LICENSE)
[![MSRV](https://img.shields.io/badge/MSRV-1.97-blue)](https://www.rust-lang.org)
[![MSRV](https://img.shields.io/badge/MSRV-1.98-blue)](https://www.rust-lang.org)

ACP (Agent Client Protocol) server adapter for embedding Zeph in IDE environments.

Expand All @@ -22,7 +22,7 @@ zeph-acp = { version = "0.22", features = ["acp-http"] }
```

**Important:**
> Requires Rust 1.97 or later.
> Requires Rust 1.98 or later.

## Features

Expand Down
7 changes: 5 additions & 2 deletions crates/zeph-acp/src/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -280,8 +280,11 @@ fn validate_path(raw: &str) -> Result<PathBuf, ToolError> {
}

impl zeph_tools::ToolExecutor for AcpFileExecutor {
async fn execute(&self, _response: &str) -> Result<Option<ToolOutput>, ToolError> {
Ok(None)
fn execute(
&self,
_response: &str,
) -> impl std::future::Future<Output = Result<Option<ToolOutput>, ToolError>> + Send {
std::future::ready(Ok(None))
}

fn tool_definitions(&self) -> Vec<ToolDef> {
Expand Down
7 changes: 5 additions & 2 deletions crates/zeph-acp/src/terminal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -389,8 +389,11 @@ struct BashStdinParams {
}

impl zeph_tools::ToolExecutor for AcpShellExecutor {
async fn execute(&self, _response: &str) -> Result<Option<ToolOutput>, ToolError> {
Ok(None)
fn execute(
&self,
_response: &str,
) -> impl std::future::Future<Output = Result<Option<ToolOutput>, ToolError>> + Send {
std::future::ready(Ok(None))
}

fn tool_definitions(&self) -> Vec<ToolDef> {
Expand Down
4 changes: 2 additions & 2 deletions crates/zeph-agent-context/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![Crates.io](https://img.shields.io/crates/v/zeph-agent-context)](https://crates.io/crates/zeph-agent-context)
[![docs.rs](https://img.shields.io/docsrs/zeph-agent-context)](https://docs.rs/zeph-agent-context)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](../../LICENSE)
[![MSRV](https://img.shields.io/badge/MSRV-1.97-blue)](https://www.rust-lang.org)
[![MSRV](https://img.shields.io/badge/MSRV-1.98-blue)](https://www.rust-lang.org)

Agent context-assembly service for the [Zeph](https://github.com/bug-ops/zeph) AI agent.

Expand All @@ -20,7 +20,7 @@ zeph-agent-context = { version = "0.22", workspace = true }
```

> [!IMPORTANT]
> Requires Rust 1.97 or later (Edition 2024). This crate does **not** depend on `zeph-core` — only on lower-level crates (`zeph-memory`, `zeph-llm`, `zeph-skills`, `zeph-context`, `zeph-sanitizer`, `zeph-config`, `zeph-common`).
> Requires Rust 1.98 or later (Edition 2024). This crate does **not** depend on `zeph-core` — only on lower-level crates (`zeph-memory`, `zeph-llm`, `zeph-skills`, `zeph-context`, `zeph-sanitizer`, `zeph-config`, `zeph-common`).

## Usage

Expand Down
23 changes: 17 additions & 6 deletions crates/zeph-agent-context/src/compaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -830,8 +830,11 @@ mod tests {
}

impl zeph_llm::provider::LlmProvider for StubProvider {
async fn chat(&self, _messages: &[Message]) -> Result<String, zeph_llm::LlmError> {
Ok(self.response.to_owned())
fn chat(
&self,
_messages: &[Message],
) -> impl std::future::Future<Output = Result<String, zeph_llm::LlmError>> + Send {
std::future::ready(Ok(self.response.to_owned()))
}

async fn chat_stream(
Expand All @@ -848,8 +851,12 @@ mod tests {
false
}

async fn embed(&self, _text: &str) -> Result<Vec<f32>, zeph_llm::LlmError> {
Ok(vec![])
fn embed(
&self,
_text: &str,
) -> impl std::future::Future<Output = Result<Vec<f32>, zeph_llm::LlmError>> + Send
{
std::future::ready(Ok(vec![]))
}

fn supports_embeddings(&self) -> bool {
Expand Down Expand Up @@ -881,8 +888,12 @@ mod tests {
false
}

async fn embed(&self, _text: &str) -> Result<Vec<f32>, zeph_llm::LlmError> {
Ok(vec![])
fn embed(
&self,
_text: &str,
) -> impl std::future::Future<Output = Result<Vec<f32>, zeph_llm::LlmError>> + Send
{
std::future::ready(Ok(vec![]))
}

fn supports_embeddings(&self) -> bool {
Expand Down
4 changes: 2 additions & 2 deletions crates/zeph-agent-feedback/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![Crates.io](https://img.shields.io/crates/v/zeph-agent-feedback)](https://crates.io/crates/zeph-agent-feedback)
[![docs.rs](https://img.shields.io/docsrs/zeph-agent-feedback)](https://docs.rs/zeph-agent-feedback)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](../../LICENSE)
[![MSRV](https://img.shields.io/badge/MSRV-1.97-blue)](https://www.rust-lang.org)
[![MSRV](https://img.shields.io/badge/MSRV-1.98-blue)](https://www.rust-lang.org)

Implicit correction detection for the [Zeph](https://github.com/bug-ops/zeph) AI agent.

Expand All @@ -27,7 +27,7 @@ Or with cargo-add:
cargo add zeph-agent-feedback
```

**Note:** Requires Rust 1.97 or later (Edition 2024).
**Note:** Requires Rust 1.98 or later (Edition 2024).

## Usage

Expand Down
2 changes: 1 addition & 1 deletion crates/zeph-agent-persistence/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![Crates.io](https://img.shields.io/crates/v/zeph-agent-persistence)](https://crates.io/crates/zeph-agent-persistence)
[![docs.rs](https://img.shields.io/docsrs/zeph-agent-persistence)](https://docs.rs/zeph-agent-persistence)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](../../LICENSE)
[![MSRV](https://img.shields.io/badge/MSRV-1.97-blue)](https://www.rust-lang.org)
[![MSRV](https://img.shields.io/badge/MSRV-1.98-blue)](https://www.rust-lang.org)

Agent persistence service for Zeph: loads conversation history from and writes messages to the
`SemanticMemory` backend (SQLite + Qdrant), with tool-pair sanitization and embedding decisions.
Expand Down
2 changes: 1 addition & 1 deletion crates/zeph-agent-tools/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![Crates.io](https://img.shields.io/crates/v/zeph-agent-tools)](https://crates.io/crates/zeph-agent-tools)
[![docs.rs](https://img.shields.io/docsrs/zeph-agent-tools)](https://docs.rs/zeph-agent-tools)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](../../LICENSE)
[![MSRV](https://img.shields.io/badge/MSRV-1.97-blue)](https://www.rust-lang.org)
[![MSRV](https://img.shields.io/badge/MSRV-1.98-blue)](https://www.rust-lang.org)

Doom-loop detection utilities for the Zeph tool dispatch loop.

Expand Down
4 changes: 2 additions & 2 deletions crates/zeph-bench/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![Crates.io](https://img.shields.io/crates/v/zeph-bench)](https://crates.io/crates/zeph-bench)
[![docs.rs](https://img.shields.io/docsrs/zeph-bench)](https://docs.rs/zeph-bench)
[![CI](https://img.shields.io/github/actions/workflow/status/bug-ops/zeph/ci.yml?branch=main)](https://github.com/bug-ops/zeph/actions)
[![MSRV](https://img.shields.io/badge/MSRV-1.97-blue)](https://www.rust-lang.org)
[![MSRV](https://img.shields.io/badge/MSRV-1.98-blue)](https://www.rust-lang.org)
[![License](https://img.shields.io/crates/l/zeph-bench)](../../LICENSE)

Benchmark harness for evaluating Zeph agent performance on standardized datasets.
Expand Down Expand Up @@ -167,7 +167,7 @@ impl Evaluator for MyEvaluator {
> the response text. Every other dataset runs under `ResponseMode::TerseAnswer`.

> [!IMPORTANT]
> Requires Rust 1.97 or later.
> Requires Rust 1.98 or later.

## Architecture

Expand Down
Loading
Loading