diff --git a/CHANGELOG.md b/CHANGELOG.md index 50196fa..b6d68b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] -### Fixed -- TUI freezes during fast LLM streaming and parallel tool execution: biased event loop with input priority and agent event batching (#500) -- Redundant syntax highlighting and markdown parsing on every TUI frame: per-message render cache with content-hash keying (#501) +## [0.11.0] - 2026-02-19 ### Added - Vision (image input) support across Claude, OpenAI, and Ollama providers (#490) @@ -49,6 +47,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Shell-based installation script (`install/install.sh`) with SHA256 verification, platform detection, and `--version` flag - Shellcheck lint job in CI pipeline - Per-job permission scoping in release workflow (least privilege) +- TUI word-jump and line-jump cursor navigation (#557) +- TUI keybinding help popup on `?` in normal mode (#533) +- TUI clickable hyperlinks via OSC 8 escape sequences (#530) +- TUI edit-last-queued for recalling queued messages (#535) +- VectorStore trait abstraction in zeph-memory (#554) +- Operation-level cancellation for LLM requests and tool executions (#538) + +### Changed +- Consolidate Docker files into `docker/` directory (#539) +- Typed deserialization for tool call params (#540) +- CI: replace oraclelinux base image with debian bookworm-slim (#532) + +### Fixed +- Strip schema metadata and fix doom loop detection for native tool calls (#534) +- TUI freezes during fast LLM streaming and parallel tool execution: biased event loop with input priority and agent event batching (#500) +- Redundant syntax highlighting and markdown parsing on every TUI frame: per-message render cache with content-hash keying (#501) ## [0.10.0] - 2026-02-18 @@ -928,7 +942,8 @@ let agent = Agent::new(provider, channel, &skills_prompt, executor); - Agent calls channel.send_typing() before each LLM request - Agent::run() uses tokio::select! to race channel messages against shutdown signal -[Unreleased]: https://github.com/bug-ops/zeph/compare/v0.10.0...HEAD +[Unreleased]: https://github.com/bug-ops/zeph/compare/v0.11.0...HEAD +[0.11.0]: https://github.com/bug-ops/zeph/compare/v0.10.0...v0.11.0 [0.10.0]: https://github.com/bug-ops/zeph/compare/v0.9.9...v0.10.0 [0.9.9]: https://github.com/bug-ops/zeph/compare/v0.9.8...v0.9.9 [0.9.8]: https://github.com/bug-ops/zeph/compare/v0.9.7...v0.9.8 diff --git a/Cargo.lock b/Cargo.lock index 42322e3..f6b4ce2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8780,7 +8780,7 @@ dependencies = [ [[package]] name = "zeph" -version = "0.10.0" +version = "0.11.0" dependencies = [ "anyhow", "clap", @@ -8813,7 +8813,7 @@ dependencies = [ [[package]] name = "zeph-a2a" -version = "0.10.0" +version = "0.11.0" dependencies = [ "axum 0.8.8", "eventsource-stream", @@ -8837,7 +8837,7 @@ dependencies = [ [[package]] name = "zeph-channels" -version = "0.10.0" +version = "0.11.0" dependencies = [ "axum 0.8.8", "criterion", @@ -8850,6 +8850,7 @@ dependencies = [ "sha2", "subtle", "teloxide", + "tempfile", "thiserror 2.0.18", "tokio", "tokio-tungstenite", @@ -8859,7 +8860,7 @@ dependencies = [ [[package]] name = "zeph-core" -version = "0.10.0" +version = "0.11.0" dependencies = [ "age", "anyhow", @@ -8889,7 +8890,7 @@ dependencies = [ [[package]] name = "zeph-gateway" -version = "0.10.0" +version = "0.11.0" dependencies = [ "axum 0.8.8", "blake3", @@ -8906,7 +8907,7 @@ dependencies = [ [[package]] name = "zeph-index" -version = "0.10.0" +version = "0.11.0" dependencies = [ "blake3", "ignore", @@ -8938,7 +8939,7 @@ dependencies = [ [[package]] name = "zeph-llm" -version = "0.10.0" +version = "0.11.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -8965,7 +8966,7 @@ dependencies = [ [[package]] name = "zeph-mcp" -version = "0.10.0" +version = "0.11.0" dependencies = [ "blake3", "qdrant-client", @@ -8984,7 +8985,7 @@ dependencies = [ [[package]] name = "zeph-memory" -version = "0.10.0" +version = "0.11.0" dependencies = [ "anyhow", "criterion", @@ -9007,7 +9008,7 @@ dependencies = [ [[package]] name = "zeph-scheduler" -version = "0.10.0" +version = "0.11.0" dependencies = [ "chrono", "cron", @@ -9022,7 +9023,7 @@ dependencies = [ [[package]] name = "zeph-skills" -version = "0.10.0" +version = "0.11.0" dependencies = [ "anyhow", "blake3", @@ -9046,7 +9047,7 @@ dependencies = [ [[package]] name = "zeph-tools" -version = "0.10.0" +version = "0.11.0" dependencies = [ "dirs", "filetime", @@ -9070,7 +9071,7 @@ dependencies = [ [[package]] name = "zeph-tui" -version = "0.10.0" +version = "0.11.0" dependencies = [ "anyhow", "crossterm", diff --git a/Cargo.toml b/Cargo.toml index 6b53030..2d90aa4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ resolver = "3" [workspace.package] edition = "2024" rust-version = "1.88" -version = "0.10.0" +version = "0.11.0" authors = ["bug-ops"] license = "MIT" repository = "https://github.com/bug-ops/zeph" @@ -85,18 +85,18 @@ unicode-width = "0.2" url = "2.5" uuid = "1.21" cron = "0.15" -zeph-a2a = { path = "crates/zeph-a2a", version = "0.10.0" } -zeph-channels = { path = "crates/zeph-channels", version = "0.10.0" } -zeph-core = { path = "crates/zeph-core", version = "0.10.0" } -zeph-index = { path = "crates/zeph-index", version = "0.10.0" } -zeph-llm = { path = "crates/zeph-llm", version = "0.10.0" } -zeph-mcp = { path = "crates/zeph-mcp", version = "0.10.0" } -zeph-memory = { path = "crates/zeph-memory", version = "0.10.0" } -zeph-skills = { path = "crates/zeph-skills", version = "0.10.0" } -zeph-tools = { path = "crates/zeph-tools", version = "0.10.0" } -zeph-gateway = { path = "crates/zeph-gateway", version = "0.10.0" } -zeph-scheduler = { path = "crates/zeph-scheduler", version = "0.10.0" } -zeph-tui = { path = "crates/zeph-tui", version = "0.10.0" } +zeph-a2a = { path = "crates/zeph-a2a", version = "0.11.0" } +zeph-channels = { path = "crates/zeph-channels", version = "0.11.0" } +zeph-core = { path = "crates/zeph-core", version = "0.11.0" } +zeph-index = { path = "crates/zeph-index", version = "0.11.0" } +zeph-llm = { path = "crates/zeph-llm", version = "0.11.0" } +zeph-mcp = { path = "crates/zeph-mcp", version = "0.11.0" } +zeph-memory = { path = "crates/zeph-memory", version = "0.11.0" } +zeph-skills = { path = "crates/zeph-skills", version = "0.11.0" } +zeph-tools = { path = "crates/zeph-tools", version = "0.11.0" } +zeph-gateway = { path = "crates/zeph-gateway", version = "0.11.0" } +zeph-scheduler = { path = "crates/zeph-scheduler", version = "0.11.0" } +zeph-tui = { path = "crates/zeph-tui", version = "0.11.0" } [workspace.lints.clippy] all = "warn" diff --git a/README.md b/README.md index ed24ce3..e62341e 100644 --- a/README.md +++ b/README.md @@ -25,16 +25,26 @@ Zeph takes the opposite approach: **automated context engineering**. Only releva ## Installation -```bash -# One-liner (Linux and macOS) -curl -fsSL https://github.com/bug-ops/zeph/releases/latest/download/install.sh | sh +> [!TIP] +> ```bash +> curl -fsSL https://github.com/bug-ops/zeph/releases/latest/download/install.sh | sh +> ``` + +
+Other installation methods +```bash # From source cargo install --git https://github.com/bug-ops/zeph + +# Docker +docker pull ghcr.io/bug-ops/zeph:latest ``` Pre-built binaries for Linux, macOS, and Windows: [GitHub Releases](https://github.com/bug-ops/zeph/releases/latest) · [Docker](https://bug-ops.github.io/zeph/guide/docker.html) +
+ ## Quick Start ```bash diff --git a/crates/zeph-llm/README.md b/crates/zeph-llm/README.md index c245ff9..8561fe8 100644 --- a/crates/zeph-llm/README.md +++ b/crates/zeph-llm/README.md @@ -19,6 +19,7 @@ Defines the `LlmProvider` trait and ships concrete backends for Ollama, Claude, | `orchestrator` | Multi-model coordination and fallback | | `router` | Model selection and routing logic | | `vision` | Image input support — base64-encoded images in LLM requests; optional dedicated `vision_model` per provider | +| `extractor` | `chat_typed()` — typed LLM output via JSON Schema (`schemars`) | | `stt` | `SpeechToText` trait and `WhisperProvider` (OpenAI Whisper, feature-gated behind `stt`) | | `candle_whisper` | Local offline STT via Candle (whisper-tiny/base/small, feature-gated behind `candle`) | | `error` | `LlmError` — unified error type | diff --git a/crates/zeph-tui/src/widgets/snapshots/zeph_tui__widgets__splash__tests__splash_default.snap b/crates/zeph-tui/src/widgets/snapshots/zeph_tui__widgets__splash__tests__splash_default.snap index 3151c0c..2f90eff 100644 --- a/crates/zeph-tui/src/widgets/snapshots/zeph_tui__widgets__splash__tests__splash_default.snap +++ b/crates/zeph-tui/src/widgets/snapshots/zeph_tui__widgets__splash__tests__splash_default.snap @@ -14,7 +14,7 @@ expression: output │ ███████╗███████╗██║ ██║ ██║ │ │ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═╝ │ │ │ -│ v0.10.0 │ +│ v0.11.0 │ │ │ │ Type a message to start. │ │ │ diff --git a/docs/src/architecture/crates.md b/docs/src/architecture/crates.md index 35a005a..5f13b42 100644 --- a/docs/src/architecture/crates.md +++ b/docs/src/architecture/crates.md @@ -23,7 +23,7 @@ Agent loop, bootstrap orchestration, configuration loading, and context builder. LLM provider abstraction and backend implementations. -- `LlmProvider` trait — `chat()`, `chat_stream()`, `embed()`, `supports_streaming()`, `supports_embeddings()`, `supports_vision()` +- `LlmProvider` trait — `chat()`, `chat_typed()`, `chat_stream()`, `embed()`, `supports_streaming()`, `supports_embeddings()`, `supports_vision()` - `MessagePart::Image` — image content part (raw bytes + MIME type) for multimodal input - `EmbedFuture` / `EmbedFn` — canonical type aliases for embedding closures, re-exported by downstream crates (`zeph-skills`, `zeph-mcp`) - `OllamaProvider` — local inference via ollama-rs diff --git a/docs/src/changelog.md b/docs/src/changelog.md index 1802d65..44fa141 100644 --- a/docs/src/changelog.md +++ b/docs/src/changelog.md @@ -8,9 +8,36 @@ See the full [CHANGELOG.md](https://github.com/bug-ops/zeph/blob/main/CHANGELOG. ## [Unreleased] +## [0.11.0] - 2026-02-19 + +### Added +- Vision (image input) support across Claude, OpenAI, and Ollama providers (#490) +- Interactive configuration wizard via `zeph init` subcommand with 5-step setup +- clap-based CLI argument parsing with `--help`, `--version` support +- Structured LLM output via `chat_typed()` with JSON schema enforcement +- Pipeline API with composable `Step` trait, `Pipeline` builder, and `ParallelStep` combinator +- Structured intent classification for skill disambiguation +- DocumentLoader trait with text/markdown/PDF file loaders in zeph-memory +- Document ingestion pipeline: load, split, embed, store via Qdrant +- Audio input support with `SpeechToText` trait and OpenAI Whisper backend (feature: `stt`) +- Local Whisper backend via candle for offline STT +- Telegram voice/audio message handling with automatic file download +- Slack audio file upload handling with host validation and size limits +- Shell-based installation script with SHA256 verification and platform detection +- TUI test automation infrastructure with insta snapshots and proptest +- TUI word-jump, line-jump cursor navigation, keybinding help popup, clickable hyperlinks +- VectorStore trait abstraction in zeph-memory +- Operation-level cancellation for LLM requests and tool executions + +### Changed +- Consolidate Docker files into `docker/` directory +- Typed deserialization for tool call params +- CI: replace oraclelinux base image with debian bookworm-slim + ### Fixed -- TUI freezes during fast LLM streaming and parallel tool execution: biased event loop with input priority and agent event batching (#500) -- Redundant syntax highlighting and markdown parsing on every TUI frame: per-message render cache with content-hash keying (#501) +- Strip schema metadata and fix doom loop detection for native tool calls (#534) +- TUI freezes during fast LLM streaming and parallel tool execution (#500) +- Redundant syntax highlighting and markdown parsing on every TUI frame (#501) ## [0.10.0] - 2026-02-18 diff --git a/docs/src/getting-started/installation.md b/docs/src/getting-started/installation.md index f000266..0c0d007 100644 --- a/docs/src/getting-started/installation.md +++ b/docs/src/getting-started/installation.md @@ -19,7 +19,7 @@ ZEPH_INSTALL_DIR=/usr/local/bin curl -fsSL https://github.com/bug-ops/zeph/relea Install a specific version: ```bash -curl -fsSL https://github.com/bug-ops/zeph/releases/latest/download/install.sh | sh -s -- --version v0.10.0 +curl -fsSL https://github.com/bug-ops/zeph/releases/latest/download/install.sh | sh -s -- --version v0.11.0 ``` After installation, run the configuration wizard: