Releases: Bahtya/kestrel-agent
Releases · Bahtya/kestrel-agent
v0.3.3
Changes
Fix: DNS resolver fallback for Android/Termux (#168)
- New
kestrel-core/src/dns.rs— customDnsResolverimplementingreqwest::dns::Resolve - Tries system config first (
/etc/resolv.conf), falls back to Google DNS (8.8.8.8, 8.8.4.4) - Injected into all reqwest client builders: providers, Telegram, Discord
- Fixes provider (ZAI/bigmodel) direct HTTPS connections on Android Termux
Fix: TLS certificate bundle (#167)
- Switched from
rustls-tls-native-roots→rustls-tls-webpki-roots - Mozilla CA bundle embedded in binary, no system certificate path dependency
Complete Android Termux fix chain
| Issue | Symptom | Fix | PR |
|---|---|---|---|
| DNS resolution | 5s timeout, no IP resolved | hickory-dns feature | #164 |
| Cargo.lock | Missing hickory packages | Lock file update | #166 |
| TLS certificates | HTTPS fails after proxy connect | webpki-roots | #167 |
| DNS fallback | Provider direct connect fails | Custom resolver | #168 |
v0.3.2
Changes
Fix: Android/Termux TLS compatibility (#167)
- Switched from
rustls-tls-native-roots→rustls-tls-webpki-roots - Mozilla CA certificate bundle now embedded in binary
- Fixes all HTTPS requests failing on Android Termux (no system cert paths)
Refactor: Test code consolidation (#165)
- New
kestrel-test-utilsshared crate - Eliminated ~10 duplicate MockProvider/MockCheck definitions
- Parameterized config validation tests
v0.3.1
What's Changed
🐛 Bug Fix
- Fix DNS resolution on Android Termux (#163, #164, #166): Added
hickory-dnsfeature to reqwest to use pure Rust DNS resolver instead of system getaddrinfo, which fails on musl static binaries due to missing/etc/resolv.confon Android.
🔧 Internal
- Bumped workspace version to 0.3.1
- Updated Cargo.lock with hickory-proto/resolver packages
Full Changelog: v0.3.0...v0.3.1
v0.3.0
ci: use cross (Docker-based) for aarch64-musl build + switch to rustl…
v0.2.5
Fixed
- VERSION constant now uses
env!("CARGO_PKG_VERSION")(#149, #150) - Heartbeat test data no longer leaks into production state file (#147, #151)
- Telegram bot command names use underscores instead of hyphens (#145, #152)
- Timeout messages now send reply instead of silently dropping (#146, #153)
- Reflection retry with exponential backoff after failure (#148, #154)
- Removed duplicate
AuditCallbackandAuditLogEntrydefinitions (CI hotfix)
v0.2.4
Added
- Structured log fields, message audit trail, and user-facing error replies (#139+)
- JSONL audit log for key daemon events (message processing, tool invocation, agent lifecycle)
- Skill invocation logging with duration tracking
- Log retention configuration (
log_retain_days) and log format selection (log_format) - Automatic log cleanup on daemon startup
v0.2.3
release: bump version to 0.2.3
v0.2.2
v0.1.1
v0.1.1
New Features
全渠道统一 TraceID (#62)
- Telegram: `tg_{update_id}_{message_id}` 格式
- Discord: `dc_{snowflake_message_id}` 格式
- API Server: `x-request-id` 中间件注入 AgentRunner
- AgentRunner: 新增 `session_key` + `trace_id` 字段,修复 `session_key: String::new()` bug
WebSocket 全链路 TraceID (#61)
- WsEnvelope 扩展 trace_id,注入 InboundMessage.metadata
- StreamChunk 携带 trace_id,端到端流式追踪
- 集成测试覆盖 trace metadata 和 streaming trace_id
Skill 系统 Phase 1-2 (#75, #76)
- 修复 `init_skill_registry()` — `with_skills_dir()` 现在正确传入,持久化不再 no-op
- 新增 `/skill` 斜杠命令(list / view / search)
- Telegram bot commands menu 注册
Bug Fixes
- AgentRunner `session_key` 不再是空字符串
- ChannelManager 流式转发 trace_id 传播修复
Commits
v0.1.0
Added
- Complete Rust workspace with 16 crates: core, config, bus, session, security, providers, tools, agent, cron, heartbeat, channels, api, daemon, memory, skill, learning
- Agent loop with context compaction, structured notes, and sub-agent spawning
- OpenAI-compatible HTTP API with SSE streaming, auth middleware, and request logging
- Telegram channel adapter with polling, inline keyboards, typing indicators, read receipts, and callback routing
- Discord channel adapter with WebSocket gateway, RESUME reconnection, typing, and read receipts
- WebSocket channel adapter for browser-based chat with rich protocol and streaming
- LLM providers (OpenAI-compatible, Anthropic) with retry, circuit breaker, and exponential backoff
- Tool registry with built-in tools: shell, web, filesystem, cron, search, spawn, message, skills
- LanceDB-backed persistent memory store with HotStore (L1) and WarmStore (L2)
- Skill system with TOML manifests, SkillRegistry, SkillCompiler, and hot-reload
- Learning event bus with processors for skill creation, memory updates, and prompt adjustment
- Prompt assembler for enriched context with tool guidance, memory fences, and skill index
- Cron scheduler with tick-based execution and JSON state persistence
- Heartbeat service with health checks, auto-restart, and exponential backoff
- Unix daemon mode with double-fork, PID file, and signal handling
- Config validation with cross-field checks, channel-provider validation, and env-var support
- Python-to-Rust config migration tool with YAML input, validation, and dry-run
- Context window budget manager with smart pruning and overflow events
- Security module with SSRF protection, URL validation, and sandboxed exec
- Mutating tool serialization for deterministic agent execution
- GitHub Actions CI with format, clippy, build, test, security audit, and merge conflict detection
- Progressive disclosure and dynamic skill commands with evolution triggers
- Config-driven HTTP/SOCKS5 proxy support for Telegram and Discord
- Online notification on Telegram channel connect
- /menu, /settings, /history, /help, /status, /validate, /reset commands across channels
Changed
- Renamed project from nanobot-rust to kestrel
- Replaced WarmStore HashMap with LanceDB persistent vector backend
- Simplified CLAUDE.md to thin harness with pointers only
- Enhanced README with build deps, API docs, and config reference
- Updated CI workflow with separate jobs, cargo-audit, and improved caching
Fixed
- Resolved CI failures from skill_loader compile error and rustls-webpki security update
- Fixed provider 503 retry with dedicated aggressive backoff strategy
- Fixed clippy dead_code warnings and hardened unwrap calls
- Fixed flaky test_handle_callback_settings_streaming_toggle
- Fixed cron sort to use sort_by_key for descending order
- Fixed unnecessary u64 cast in retry jitter calculation
- Fixed tool argument parse errors to surface instead of defaulting to empty JSON
- Fixed session regression tests after note store redesign
- Fixed Discord Gateway intents and heartbeat cleanup
- Fixed heartbeat to use configured model name in provider health check
- Fixed learning: removed dead code, added post-task reflection, and validated empty instructions
- Fixed skill mutation lock and disk-first writes
- Fixed HotStore LRU eviction to O(1) performance
- Fixed agent wiring: skill index into runtime and ProcessorStats version tag
- Fixed health checks wired into gateway startup path
- Fixed cargo fmt after PR merges
- Removed legacy memory.rs, unified on kestrel-memory crate