## ✨ Added

**Agent System**

- **Windows Diagnostics**: `qwenpaw doctor` now checks Windows-specific environment issues including long path support, PowerShell language mode, and working directory path length ([#4032](https://github.com/agentscope-ai/QwenPaw/pull/4032))
- **Agent Status API**: New `GET /agents/{agentId}/agent-status` endpoint reporting agent runtime status, running task count, and task timestamps ([#4107](https://github.com/agentscope-ai/QwenPaw/pull/4107))
- **Cron Session Isolation**: Cron jobs now support a `share_session` option — when disabled, each scheduled run creates an isolated session context with a cron job ID ([#4117](https://github.com/agentscope-ai/QwenPaw/pull/4117))
- **GPT Image 2 Plugin**: New tool plugin for generating images via OpenAI's GPT Image 2 API ([#3911](https://github.com/agentscope-ai/QwenPaw/pull/3911))
- **Config-Driven Agent Name**: Use the configured agent profile name instead of a hardcoded default ([#4140](https://github.com/agentscope-ai/QwenPaw/pull/4140))

**Chat & Console**

- **Whisper Voice Input**: Replaced browser-native Web Speech API with server-side Whisper transcription for more reliable, cross-browser voice input ([#3574](https://github.com/agentscope-ai/QwenPaw/pull/3574))
- **LLM-Generated Session Titles**: Chat sessions are now automatically titled by the LLM in the background after the first message. Configurable via the "Auto-generate session titles" toggle in Agent Config ([#3829](https://github.com/agentscope-ai/QwenPaw/pull/3829))
- **Token Usage Trends**: Added per-model and per-token-type trend line charts to the Token Usage settings page for visualizing usage over time ([#4080](https://github.com/agentscope-ai/QwenPaw/pull/4080), [#4094](https://github.com/agentscope-ai/QwenPaw/pull/4094))
- **Batch Skill Operations**: Added Enable and Disable buttons to the skill batch operation toolbar with per-skill error reporting ([#4091](https://github.com/agentscope-ai/QwenPaw/pull/4091))
- **Mermaid Diagram Rendering**: Markdown code blocks with `mermaid` language tag are now rendered as interactive diagrams in chat and file previews ([#4146](https://github.com/agentscope-ai/QwenPaw/pull/4146))
- **Brazilian Portuguese (pt-BR)**: Added full pt-BR locale support for both the Console UI and backend language settings ([#4009](https://github.com/agentscope-ai/QwenPaw/pull/4009), [#4143](https://github.com/agentscope-ai/QwenPaw/pull/4143))

**Providers**

- **Volcano Engine Provider**: Added Volcano Engine as a built-in OpenAI-compatible provider with standard and Coding Plan endpoints ([#3994](https://github.com/agentscope-ai/QwenPaw/pull/3994))
- **DashScope Region Selection**: DashScope base URL can now be modified from preset region endpoints ([#4074](https://github.com/agentscope-ai/QwenPaw/pull/4074))
- **Aliyun Token Plan Provider**: Added Aliyun Token Plan as a built-in provider ([#4122](https://github.com/agentscope-ai/QwenPaw/pull/4122))
- **Anthropic Default Max Tokens**: Raised default `max_tokens` for Anthropic-compatible models to 16,384 ([#4054](https://github.com/agentscope-ai/QwenPaw/pull/4054))

**Channels**

- **Feishu Interactive Approval Cards**: Tool-guard approval requests in Feishu are now rendered as interactive button cards that update in-place on approve/deny, with a documentation link hint when the card action callback is not subscribed ([#3941](https://github.com/agentscope-ai/QwenPaw/pull/3941), [#3982](https://github.com/agentscope-ai/QwenPaw/pull/3982))
- **WeCom Group Session Sharing**: Added `share_session_in_group` toggle to control whether group chat members share a single session or get per-member isolation ([#3948](https://github.com/agentscope-ai/QwenPaw/pull/3948))
- **Feishu Sender Context**: Feishu sender nickname is now passed to the agent environment context ([#4098](https://github.com/agentscope-ai/QwenPaw/pull/4098))
- **WeCom Interactive Approval Cards**: Tool-guard approval requests in WeCom are now rendered as interactive template cards ([#4112](https://github.com/agentscope-ai/QwenPaw/pull/4112))

**Security**

- **Static File Path Traversal Protection**: Console static file serving now rejects absolute paths to prevent path traversal bypass ([#3973](https://github.com/agentscope-ai/QwenPaw/pull/3973))
- **Rule-Level Auto Deny**: Individual security rules can now be configured to automatically deny tool calls ([#4046](https://github.com/agentscope-ai/QwenPaw/pull/4046))

**Skills & CLI**

- **Skill Test CLI**: New `qwenpaw skills test` command to validate skill content and run security scans ([#3999](https://github.com/agentscope-ai/QwenPaw/pull/3999))
- **Skill Install/Uninstall CLI**: New `qwenpaw skills install` and `qwenpaw skills uninstall` commands for managing skills from the command line, supporting both pool-level and per-agent workspace installs ([#4053](https://github.com/agentscope-ai/QwenPaw/pull/4053))

## ⚡ Performance

- **Console Rendering**: Eliminated duplicate re-renders by stabilizing approval polling state comparisons and memoizing chat runtime options ([#4052](https://github.com/agentscope-ai/QwenPaw/pull/4052), [#4110](https://github.com/agentscope-ai/QwenPaw/pull/4110), [#4153](https://github.com/agentscope-ai/QwenPaw/pull/4153))
- **Chat History Navigation**: Skip chat history lookup for non-arrow keys and cache user-message lists to avoid repeated scans on every keystroke ([#4130](https://github.com/agentscope-ai/QwenPaw/pull/4130))
- **QR Polling Cleanup**: Immediately stop QR code polling and clear status indicators on auth completion or code expiry ([#4148](https://github.com/agentscope-ai/QwenPaw/pull/4148))

## 🐛 Fixed

**Channels**

- **WeCom Stream Keepalive**: Keep the "Thinking..." placeholder stream alive with periodic refreshes to prevent stuck status indicators in WeCom ([#3950](https://github.com/agentscope-ai/QwenPaw/pull/3950))
- **WeCom Reconnect Race**: Fixed double reconnect scheduling and cross-event-loop disconnect in WeCom WebSocket handling ([#3963](https://github.com/agentscope-ai/QwenPaw/pull/3963))
- **Telegram Network Retry**: Added exponential backoff and controlled reconnect for transient Telegram network errors instead of silently dying ([#4039](https://github.com/agentscope-ai/QwenPaw/pull/4039))
- **WeChat Cron Buffer Flush**: Flush WeChat merge buffer immediately for cron/proactive sends that bypass the normal completion path ([#4106](https://github.com/agentscope-ai/QwenPaw/pull/4106))
- **Markdown Table Splitting**: Preserve markdown table structure across message chunks by repeating header and separator rows in each fragment ([#4119](https://github.com/agentscope-ai/QwenPaw/pull/4119))

**Agent System**

- **External Agent Timeout**: Added safe default timeout (60s) for `delegate_external_agent` to prevent indefinite hangs ([#3928](https://github.com/agentscope-ai/QwenPaw/pull/3928))
- **Agent Config Reload**: Agent config file changes now trigger a graceful reload with task draining instead of lightweight reinstantiation ([#4064](https://github.com/agentscope-ai/QwenPaw/pull/4064))
- **Agent Config Persistence**: Fixed the console agent config editor dropping nested settings on save by preserving the complete config structure ([#4157](https://github.com/agentscope-ai/QwenPaw/pull/4157))

**MCP**

- **MCP Execution Timeout**: Use `sse_read_timeout` as the MCP tool execution timeout instead of the shorter HTTP connect timeout ([#4058](https://github.com/agentscope-ai/QwenPaw/pull/4058), [#4061](https://github.com/agentscope-ai/QwenPaw/pull/4061))
- **MCP Client Lifecycle Leak**: Fixed lifecycle-task leak where `close()` could skip stopping a background reconnect task ([#4152](https://github.com/agentscope-ai/QwenPaw/pull/4152))

**Console & UI**

- **SSE Surrogate Safety**: Avoid SSE stream crash on malformed surrogate text by sanitizing non-encodable content before serialization ([#3553](https://github.com/agentscope-ai/QwenPaw/pull/3553))
- **CodeMirror Line Wrapping**: Fixed line wrapping in tool call input/output blocks ([#3960](https://github.com/agentscope-ai/QwenPaw/pull/3960))
- **Default Agent Display Name**: Respect custom name for the default agent in all UI surfaces ([#4073](https://github.com/agentscope-ai/QwenPaw/pull/4073))
- **File Preview Paths**: Fixed redundant URL prefix stripping in file preview paths that could cause broken URLs ([#4089](https://github.com/agentscope-ai/QwenPaw/pull/4089))

**Infrastructure**

- **Docker Backup Restore**: Correctly restore secrets on Docker volume mount points by swapping directory contents instead of renaming ([#3916](https://github.com/agentscope-ai/QwenPaw/pull/3916))
- **Audio Block Paths**: Return resolved filesystem path for `file://` URL audio blocks and remove redundant file handling code ([#4021](https://github.com/agentscope-ai/QwenPaw/pull/4021), [#4048](https://github.com/agentscope-ai/QwenPaw/pull/4048))
- **Log Rotation**: Use `RotatingFileHandler` for log rotation on all platforms ([#4076](https://github.com/agentscope-ai/QwenPaw/pull/4076))
- **Loopback Proxy Bypass**: Bypass proxy environment variables for loopback API health checks to prevent connection failures behind corporate proxies ([#4092](https://github.com/agentscope-ai/QwenPaw/pull/4092))
- **Conda Packaging**: Restore conda packaging tools before running `conda-pack` to prevent broken packaging pipeline ([#4093](https://github.com/agentscope-ai/QwenPaw/pull/4093))

## 📝 Documentation

- **WSL2 Timeout FAQ**: Added FAQ entry for handling `APITimeoutError` when running in WSL2 NAT mode ([#4005](https://github.com/agentscope-ai/QwenPaw/pull/4005))
- **Documentation Update**: Updated website documentation to reflect new features ([#4013](https://github.com/agentscope-ai/QwenPaw/pull/4013))

## 🧪 Testing & CI

- **Console Unit Tests**: Added Vitest setup with unit and component tests covering Chat, API layer, and shared components ([#3559](https://github.com/agentscope-ai/QwenPaw/pull/3559), [#4121](https://github.com/agentscope-ai/QwenPaw/pull/4121))
- **Integration Smoke Tests**: Added app startup and settings/environment variable smoke tests ([#4081](https://github.com/agentscope-ai/QwenPaw/pull/4081))
