Skip to content

Releases: Bahtya/kestrel-agent

v0.3.3

26 Apr 05:43

Choose a tag to compare

Changes

Fix: DNS resolver fallback for Android/Termux (#168)

  • New kestrel-core/src/dns.rs — custom DnsResolver implementing reqwest::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-rootsrustls-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

26 Apr 03:26

Choose a tag to compare

Changes

Fix: Android/Termux TLS compatibility (#167)

  • Switched from rustls-tls-native-rootsrustls-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-utils shared crate
  • Eliminated ~10 duplicate MockProvider/MockCheck definitions
  • Parameterized config validation tests

v0.3.1

25 Apr 21:29

Choose a tag to compare

What's Changed

🐛 Bug Fix

  • Fix DNS resolution on Android Termux (#163, #164, #166): Added hickory-dns feature to reqwest to use pure Rust DNS resolver instead of system getaddrinfo, which fails on musl static binaries due to missing /etc/resolv.conf on 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

24 Apr 02:24

Choose a tag to compare

ci: use cross (Docker-based) for aarch64-musl build + switch to rustl…

v0.2.5

23 Apr 17:32

Choose a tag to compare

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 AuditCallback and AuditLogEntry definitions (CI hotfix)

v0.2.4

23 Apr 10:22

Choose a tag to compare

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

23 Apr 02:46

Choose a tag to compare

release: bump version to 0.2.3

v0.2.2

22 Apr 19:33
67b85b0

Choose a tag to compare

Fixed

  • Fix session persistence race condition in e2e tests by sending session keys instead of snapshots to the background worker (#136)
  • Suppress unused variable warnings in test code (#136)

v0.1.1

20 Apr 19:18

Choose a tag to compare

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

  • feat(trace): unified trace_id across all channels (#93)
  • feat(trace): WebSocket full-chain TraceID (#92)
  • feat(skill): skill system Phase 1+2 (#76)

v0.1.0

20 Apr 06:59

Choose a tag to compare

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