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
14 changes: 7 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

### Fixed

- fix(channels): apply 30-second per-request timeout to `TelegramApiClient::new()` and
`TelegramApiClient::with_base_url()` to prevent indefinite stalls when `api.telegram.org`
is unreachable (issue #3777). The constant `REQUEST_TIMEOUT` is defined in
`telegram_api_ext.rs` and matches the project's general policy for external HTTP calls.
## [0.21.1] - 2026-05-12

### Added

Expand All @@ -34,6 +29,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

### Fixed

- fix(channels): apply 30-second per-request timeout to `TelegramApiClient::new()` and
`TelegramApiClient::with_base_url()` to prevent indefinite stalls when `api.telegram.org`
is unreachable (issue #3777). The constant `REQUEST_TIMEOUT` is defined in
`telegram_api_ext.rs` and matches the project's general policy for external HTTP calls.
- fix(core): pass live MCP dispatch to `on_turn_complete` hook dispatcher. The hook path
previously hardcoded `no_mcp = None`, causing every `mcp_tool` hook configured under
`on_turn_complete` to fail with `HookError::McpUnavailable`. Now calls `self.mcp_dispatch()`
Expand Down Expand Up @@ -5841,7 +5840,8 @@ let agent = Agent::new(provider, channel, &skills_prompt, executor);
- Agent::run() uses tokio::select! to race channel messages against shutdown signal

[0.16.0]: https://github.com/bug-ops/zeph/compare/v0.15.3...v0.16.0
[Unreleased]: https://github.com/bug-ops/zeph/compare/v0.21.0...HEAD
[Unreleased]: https://github.com/bug-ops/zeph/compare/v0.21.1...HEAD
[0.21.1]: https://github.com/bug-ops/zeph/compare/v0.21.0...v0.21.1
[0.21.0]: https://github.com/bug-ops/zeph/compare/v0.20.2...v0.21.0
[0.20.2]: https://github.com/bug-ops/zeph/compare/v0.20.1...v0.20.2
[0.20.1]: https://github.com/bug-ops/zeph/compare/v0.20.0...v0.20.1
Expand Down
60 changes: 30 additions & 30 deletions Cargo.lock

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

60 changes: 30 additions & 30 deletions 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.95"
version = "0.21.0"
version = "0.21.1"
authors = ["bug-ops"]
license = "MIT"
repository = "https://github.com/bug-ops/zeph"
Expand Down Expand Up @@ -145,35 +145,35 @@ url = "2.5.8"
uuid = "1.23.1"
walkdir = "2.5"
wiremock = "0.6.5"
zeph-a2a = { path = "crates/zeph-a2a", version = "0.21.0" }
zeph-acp = { path = "crates/zeph-acp", version = "0.21.0" }
zeph-agent-context = { path = "crates/zeph-agent-context", version = "0.21.0" }
zeph-agent-feedback = { path = "crates/zeph-agent-feedback", version = "0.21.0" }
zeph-agent-persistence = { path = "crates/zeph-agent-persistence", version = "0.21.0" }
zeph-agent-tools = { path = "crates/zeph-agent-tools", version = "0.21.0" }
zeph-bench = { path = "crates/zeph-bench", version = "0.21.0" }
zeph-channels = { path = "crates/zeph-channels", version = "0.21.0" }
zeph-commands = { path = "crates/zeph-commands", version = "0.21.0" }
zeph-common = { path = "crates/zeph-common", version = "0.21.0" }
zeph-config = { path = "crates/zeph-config", version = "0.21.0" }
zeph-context = { path = "crates/zeph-context", version = "0.21.0" }
zeph-core = { path = "crates/zeph-core", version = "0.21.0" }
zeph-db = { path = "crates/zeph-db", default-features = false, version = "0.21.0" }
zeph-experiments = { path = "crates/zeph-experiments", version = "0.21.0" }
zeph-gateway = { path = "crates/zeph-gateway", version = "0.21.0" }
zeph-index = { path = "crates/zeph-index", version = "0.21.0" }
zeph-llm = { path = "crates/zeph-llm", version = "0.21.0" }
zeph-mcp = { path = "crates/zeph-mcp", version = "0.21.0" }
zeph-memory = { path = "crates/zeph-memory", default-features = false, version = "0.21.0" }
zeph-orchestration = { path = "crates/zeph-orchestration", version = "0.21.0" }
zeph-plugins = { path = "crates/zeph-plugins", version = "0.21.0" }
zeph-sanitizer = { path = "crates/zeph-sanitizer", version = "0.21.0" }
zeph-scheduler = { path = "crates/zeph-scheduler", version = "0.21.0" }
zeph-skills = { path = "crates/zeph-skills", version = "0.21.0" }
zeph-subagent = { path = "crates/zeph-subagent", version = "0.21.0" }
zeph-tools = { path = "crates/zeph-tools", version = "0.21.0" }
zeph-tui = { path = "crates/zeph-tui", version = "0.21.0" }
zeph-vault = { path = "crates/zeph-vault", version = "0.21.0" }
zeph-a2a = { path = "crates/zeph-a2a", version = "0.21.1" }
zeph-acp = { path = "crates/zeph-acp", version = "0.21.1" }
zeph-agent-context = { path = "crates/zeph-agent-context", version = "0.21.1" }
zeph-agent-feedback = { path = "crates/zeph-agent-feedback", version = "0.21.1" }
zeph-agent-persistence = { path = "crates/zeph-agent-persistence", version = "0.21.1" }
zeph-agent-tools = { path = "crates/zeph-agent-tools", version = "0.21.1" }
zeph-bench = { path = "crates/zeph-bench", version = "0.21.1" }
zeph-channels = { path = "crates/zeph-channels", version = "0.21.1" }
zeph-commands = { path = "crates/zeph-commands", version = "0.21.1" }
zeph-common = { path = "crates/zeph-common", version = "0.21.1" }
zeph-config = { path = "crates/zeph-config", version = "0.21.1" }
zeph-context = { path = "crates/zeph-context", version = "0.21.1" }
zeph-core = { path = "crates/zeph-core", version = "0.21.1" }
zeph-db = { path = "crates/zeph-db", default-features = false, version = "0.21.1" }
zeph-experiments = { path = "crates/zeph-experiments", version = "0.21.1" }
zeph-gateway = { path = "crates/zeph-gateway", version = "0.21.1" }
zeph-index = { path = "crates/zeph-index", version = "0.21.1" }
zeph-llm = { path = "crates/zeph-llm", version = "0.21.1" }
zeph-mcp = { path = "crates/zeph-mcp", version = "0.21.1" }
zeph-memory = { path = "crates/zeph-memory", default-features = false, version = "0.21.1" }
zeph-orchestration = { path = "crates/zeph-orchestration", version = "0.21.1" }
zeph-plugins = { path = "crates/zeph-plugins", version = "0.21.1" }
zeph-sanitizer = { path = "crates/zeph-sanitizer", version = "0.21.1" }
zeph-scheduler = { path = "crates/zeph-scheduler", version = "0.21.1" }
zeph-skills = { path = "crates/zeph-skills", version = "0.21.1" }
zeph-subagent = { path = "crates/zeph-subagent", version = "0.21.1" }
zeph-tools = { path = "crates/zeph-tools", version = "0.21.1" }
zeph-tui = { path = "crates/zeph-tui", version = "0.21.1" }
zeph-vault = { path = "crates/zeph-vault", version = "0.21.1" }
zeroize = { version = "1.8.2", default-features = false }

[workspace.lints.rust]
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
[![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.95-blue)](https://www.rust-lang.org)
[![Tests](https://img.shields.io/badge/tests-9139-brightgreen)](https://github.com/bug-ops/zeph/actions)
[![Tests](https://img.shields.io/badge/tests-9201-brightgreen)](https://github.com/bug-ops/zeph/actions)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
</div>

Expand Down
2 changes: 1 addition & 1 deletion book/src/advanced/channels.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Zeph supports six I/O channels. Each implements the `Channel` trait and can be s
| CLI | Default | Token-by-token to stdout | y/N prompt |
| Discord | `ZEPH_DISCORD_TOKEN` (requires `discord` feature) | Edit-in-place every 1.5s | Reply "yes" |
| Slack | `ZEPH_SLACK_BOT_TOKEN` (requires `slack` feature) | `chat.update` every 2s | Reply "yes" |
| Telegram | `ZEPH_TELEGRAM_TOKEN` | Edit-in-place every 10s | Reply "yes" |
| Telegram | `ZEPH_TELEGRAM_TOKEN` | Edit-in-place every 10s (30s request timeout) | Reply "yes" |
| TUI | `--tui` flag (requires `tui` feature) | Real-time in chat panel | Auto-confirm |
| Loopback | `--daemon` flag (requires `daemon` + `a2a` features) | Via `LoopbackEvent` mpsc | Auto-confirm |

Expand Down
Loading
Loading