## ✨ Added

**Desktop & IDE**

- **Tauri 2.x Desktop App**: New Tauri-based native desktop app for macOS and Windows ([#3813](https://github.com/agentscope-ai/QwenPaw/pull/3813))
- **Coding Mode**: New Web IDE with a three-panel layout — file tree, tabbed editor with inline diff review, and a Git panel for branching, staging, and committing ([#4578](https://github.com/agentscope-ai/QwenPaw/pull/4578), [#4671](https://github.com/agentscope-ai/QwenPaw/pull/4671))

**Skills & Providers**

- **Skill Market**: Browse and install skills from multiple providers (Aliyun, ClawHub, ModelScope) via a new Skill Market page with cross-provider search ([#4518](https://github.com/agentscope-ai/QwenPaw/pull/4518), [#4623](https://github.com/agentscope-ai/QwenPaw/pull/4623))
- **OpenCode Go Provider**: OpenCode and OpenCode Go now share a single provider with switchable API endpoints ([#4536](https://github.com/agentscope-ai/QwenPaw/pull/4536), [#4549](https://github.com/agentscope-ai/QwenPaw/pull/4549))
- **Browser Headless Warning**: Headless browser launches now include a warning with instructions to switch to headed mode if verification pages appear ([#4603](https://github.com/agentscope-ai/QwenPaw/pull/4603))

**Agent System**

- **Background Task Timeout**: `submit_to_agent` now accepts a `task_timeout` parameter, also available via the CLI `--task-timeout` flag ([#4547](https://github.com/agentscope-ai/QwenPaw/pull/4547))
- **File Block Context**: File blocks in message content are now processed and token-counted alongside image, audio, and video blocks ([#4567](https://github.com/agentscope-ai/QwenPaw/pull/4567))
- **Tool Guard Deny Feedback**: When a user denies a tool call, the agent receives explicit instructions not to retry or attempt alternatives ([#4569](https://github.com/agentscope-ai/QwenPaw/pull/4569))
- **Isolated Cron Sessions**: Non-shared cron jobs now execute with clean context while history accumulates in a unified per-job session ([#4602](https://github.com/agentscope-ai/QwenPaw/pull/4602))

**Chat & Console**

- **File Download on Desktop**: Clicking file cards in chat now works correctly in the pywebview desktop app ([#4566](https://github.com/agentscope-ai/QwenPaw/pull/4566))
- **Chat Input Draft Persistence**: Chat input text and cursor position are saved and restored across page navigation ([#4598](https://github.com/agentscope-ai/QwenPaw/pull/4598))
- **Memory Summary in Chat History**: Chat history now includes the memory summary ([#4658](https://github.com/agentscope-ai/QwenPaw/pull/4658))

**Channels**

- **Unified Access Control**: Per-channel whitelist / blacklist / pending-approval system with a console UI for managing user access across all channels ([#4565](https://github.com/agentscope-ai/QwenPaw/pull/4565))
- **QQ Tool Guard Approval Card**: Interactive keyboard-button cards for approve / deny actions in QQ channel ([#4667](https://github.com/agentscope-ai/QwenPaw/pull/4667))

## 🔄 Changed

- **Plugin Manager UI**: Redesigned plugin manager page with i18n-aware descriptions, kind filters, name search, and auto-reload after install / uninstall ([#4545](https://github.com/agentscope-ai/QwenPaw/pull/4545), [#4588](https://github.com/agentscope-ai/QwenPaw/pull/4588))
- **Skill Content Validation**: Skills imported from zip or saved via the editor are now validated before being accepted ([#4591](https://github.com/agentscope-ai/QwenPaw/pull/4591))
- **Console UI Refresh**: Updated header navigation layout and Environments & Security settings pages ([#4654](https://github.com/agentscope-ai/QwenPaw/pull/4654), [#4657](https://github.com/agentscope-ai/QwenPaw/pull/4657))

## 🐛 Fixed

**Channels**

- **WeChat Message Reliability**: Added content-based dedup to catch duplicates across polls; skip sends on expired `context_token`; report accurate failures for API-initiated messages ([#4576](https://github.com/agentscope-ai/QwenPaw/pull/4576), [#4597](https://github.com/agentscope-ai/QwenPaw/pull/4597), [#4618](https://github.com/agentscope-ai/QwenPaw/pull/4618), [#4627](https://github.com/agentscope-ai/QwenPaw/pull/4627))
- **DingTalk Chinese Filenames**: Percent-encoded Chinese filenames in file sends are now decoded correctly ([#4600](https://github.com/agentscope-ai/QwenPaw/pull/4600))
- **DingTalk DM Webhook Key**: DM webhook store keys now include `sender_id` to prevent collision when different conversations share the same `conversation_id` suffix ([#4665](https://github.com/agentscope-ai/QwenPaw/pull/4665))

**Console & UI**

- **MCP Client Key Routing**: Fixed routing for MCP client keys containing `/` ([#4560](https://github.com/agentscope-ai/QwenPaw/pull/4560))
- **QwenPaw Pet**: Fixed Windows compatibility, pet stuck in Done state on consecutive conversations, and changed auto-start default to opt-in ([#4564](https://github.com/agentscope-ai/QwenPaw/pull/4564), [#4626](https://github.com/agentscope-ai/QwenPaw/pull/4626))
- **Dark Mode Visibility**: Fixed invisible plan panel header and pet import drop zone in dark mode ([#4570](https://github.com/agentscope-ai/QwenPaw/pull/4570), [#4599](https://github.com/agentscope-ai/QwenPaw/pull/4599))
- **Whisper Speech Button**: Chat page now waits for the Whisper provider check before showing the speech button, preventing a brief flash of browser speech when Whisper is configured ([#4601](https://github.com/agentscope-ai/QwenPaw/pull/4601))

**Providers & Security**

- **Proxy Client IP**: Auth bypass whitelist now resolves the real client IP instead of using the proxy's address ([#4562](https://github.com/agentscope-ai/QwenPaw/pull/4562))
- **Gemini `max_tokens`**: The Gemini provider now correctly maps `max_tokens` to `max_output_tokens` ([#4621](https://github.com/agentscope-ai/QwenPaw/pull/4621))

## 🧪 Testing

- **Integration Test Suite**: Refactored and expanded integration tests with broader coverage ([#4561](https://github.com/agentscope-ai/QwenPaw/pull/4561))
