Skip to content
Open
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
7 changes: 4 additions & 3 deletions docs/users/configuration/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ Settings are organized into categories. All settings should be placed within the
| `ui.showMemoryUsage` | boolean | Display memory usage information in the UI. | `false` |
| `ui.showLineNumbers` | boolean | Show line numbers in code blocks in the CLI output. | `true` |
| `ui.showCitations` | boolean | Show citations for generated text in the chat. | `true` |
| `ui.compactMode` | boolean | Hide tool output and thinking for a cleaner view. Toggle with `Ctrl+O` during a session. When enabled, a `compact` indicator appears in the footer. The setting persists across sessions. | `false` |
| `enableWelcomeBack` | boolean | Show welcome back dialog when returning to a project with conversation history. When enabled, Qwen Code will automatically detect if you're returning to a project with a previously generated project summary (`.qwen/PROJECT_SUMMARY.md`) and show a dialog allowing you to continue your previous conversation or start fresh. This feature integrates with the `/summary` command and quit confirmation dialog. | `true` |
| `ui.accessibility.enableLoadingPhrases` | boolean | Enable loading phrases (disable for accessibility). | `true` |
| `ui.accessibility.screenReader` | boolean | Enables screen reader mode, which adjusts the TUI for better compatibility with screen readers. | `false` |
Expand Down Expand Up @@ -203,9 +204,9 @@ The `extra_body` field allows you to add custom parameters to the request body s

#### fastModel

| Setting | Type | Description | Default |
| ----------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| `fastModel` | string | Model for background tasks ([suggestion generation](../features/followup-suggestions), speculation). Leave empty to use the main model. A smaller/faster model (e.g., `qwen3.5-flash`) reduces latency and cost. Can also be set via `/model --fast`. | `""` |
| Setting | Type | Description | Default |
| ----------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| `fastModel` | string | Model used for generating [prompt suggestions](../features/followup-suggestions) and speculative execution. Leave empty to use the main model. A smaller/faster model (e.g., `qwen3-coder-flash`) reduces latency and cost. Can also be set via `/model --fast`. | `""` |

#### context

Expand Down
31 changes: 16 additions & 15 deletions docs/users/features/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ Commands for adjusting interface appearance and work environment.
| ------------ | ---------------------------------------- | ----------------------------- |
| `/clear` | Clear terminal screen content | `/clear` (shortcut: `Ctrl+L`) |
| `/context` | Show context window usage breakdown | `/context` |
| → `detail` | Show per-item context usage breakdown | `/context detail` |
| `/theme` | Change Qwen Code visual theme | `/theme` |
| `/vim` | Turn input area Vim editing mode on/off | `/vim` |
| `/directory` | Manage multi-directory support workspace | `/dir add ./src,./tests` |
Expand All @@ -56,21 +57,21 @@ Commands specifically for controlling interface and output language.

Commands for managing AI tools and models.

| Command | Description | Usage Examples |
| ---------------- | ------------------------------------------------- | --------------------------------------------- |
| `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc` |
| `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
| `/skills` | List and run available skills | `/skills`, `/skills <name>` |
| `/plan` | Switch to plan mode or exit plan mode | `/plan`, `/plan <task>`, `/plan exit` |
| `/approval-mode` | Change approval mode for tool usage | `/approval-mode <mode (auto-edit)> --project` |
| →`plan` | Analysis only, no execution | Secure review |
| →`default` | Require approval for edits | Daily use |
| →`auto-edit` | Automatically approve edits | Trusted environment |
| →`yolo` | Automatically approve all | Quick prototyping |
| `/model` | Switch model used in current session | `/model` |
| `/model --fast` | Set or select the fast model for background tasks | `/model --fast qwen3.5-flash` |
| `/extensions` | List all active extensions in current session | `/extensions` |
| `/memory` | Manage AI's instruction context | `/memory add Important Info` |
| Command | Description | Usage Examples |
| ---------------- | --------------------------------------------- | --------------------------------------------- |
| `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc` |
| `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
| `/skills` | List and run available skills | `/skills`, `/skills <name>` |
| `/plan` | Switch to plan mode or exit plan mode | `/plan`, `/plan <task>`, `/plan exit` |
| `/approval-mode` | Change approval mode for tool usage | `/approval-mode <mode (auto-edit)> --project` |
| →`plan` | Analysis only, no execution | Secure review |
| →`default` | Require approval for edits | Daily use |
| →`auto-edit` | Automatically approve edits | Trusted environment |
| →`yolo` | Automatically approve all | Quick prototyping |
| `/model` | Switch model used in current session | `/model` |
| `/model --fast` | Set a lighter model for prompt suggestions | `/model --fast qwen3-coder-flash` |
| `/extensions` | List all active extensions in current session | `/extensions` |
| `/memory` | Manage AI's instruction context | `/memory add Important Info` |

### 1.5 Built-in Skills

Expand Down
10 changes: 5 additions & 5 deletions docs/users/features/followup-suggestions.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ By default, suggestions use the same model as your main conversation. For faster
### Via command

```
/model --fast qwen3.5-flash
/model --fast qwen3-coder-flash
```

Or use `/model --fast` (without a model name) to open a selection dialog.
Expand All @@ -58,11 +58,11 @@ Or use `/model --fast` (without a model name) to open a selection dialog.

```json
{
"fastModel": "qwen3.5-flash"
"fastModel": "qwen3-coder-flash"
}
```

The fast model is used for background tasks like suggestion generation. When not configured, the main conversation model is used as fallback.
The fast model is used for prompt suggestions and speculative execution. When not configured, the main conversation model is used as fallback.

Thinking/reasoning mode is automatically disabled for all background tasks (suggestion generation and speculation), regardless of your main model's thinking configuration. This avoids wasting tokens on internal reasoning that isn't needed for these tasks.

Expand All @@ -75,13 +75,13 @@ These settings can be configured in `settings.json`:
| `ui.enableFollowupSuggestions` | boolean | `true` | Enable or disable followup suggestions |
| `ui.enableCacheSharing` | boolean | `true` | Use cache-aware forked queries to reduce cost (experimental) |
| `ui.enableSpeculation` | boolean | `false` | Speculatively execute suggestions before submission (experimental) |
| `fastModel` | string | `""` | Model for background tasks (suggestion generation, speculation) |
| `fastModel` | string | `""` | Model for prompt suggestions and speculative execution |

### Example

```json
{
"fastModel": "qwen3.5-flash",
"fastModel": "qwen3-coder-flash",
"ui": {
"enableFollowupSuggestions": true,
"enableCacheSharing": true
Expand Down
2 changes: 1 addition & 1 deletion docs/users/reference/keyboard-shortcuts.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This document lists the available keyboard shortcuts in Qwen Code.
| `Ctrl+C` | Cancel the ongoing request and clear the input. Press twice to exit the application. |
| `Ctrl+D` | Exit the application if the input is empty. Press twice to confirm. |
| `Ctrl+L` | Clear the screen. |
| `Ctrl+O` | Toggle the display of the debug console. |
| `Ctrl+O` | Toggle compact mode (hide/show tool output and thinking). |
| `Ctrl+S` | Allows long responses to print fully, disabling truncation. Use your terminal's scrollback to view the entire output. |
| `Ctrl+T` | Toggle the display of tool descriptions. |
| `Shift+Tab` (`Tab` on Windows) | Cycle approval modes (`plan` → `default` → `auto-edit` → `yolo`) |
Expand Down
26 changes: 13 additions & 13 deletions package-lock.json

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

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/qwen-code",
"version": "0.14.2",
"version": "0.14.3",
"engines": {
"node": ">=20.0.0"
},
Expand All @@ -18,7 +18,7 @@
"url": "git+https://github.com/QwenLM/qwen-code.git"
},
"config": {
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.14.2"
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.14.3"
},
"scripts": {
"start": "cross-env node scripts/start.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/channels/base/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-base",
"version": "0.14.2",
"version": "0.14.3",
"description": "Base channel infrastructure for Qwen Code",
"type": "module",
"main": "dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/channels/dingtalk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-dingtalk",
"version": "0.14.2",
"version": "0.14.3",
"description": "DingTalk channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/channels/plugin-example/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-plugin-example",
"version": "0.14.2",
"version": "0.14.3",
"private": true,
"type": "module",
"main": "dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/channels/telegram/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-telegram",
"version": "0.14.2",
"version": "0.14.3",
"description": "Telegram channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/channels/weixin/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-weixin",
"version": "0.14.2",
"version": "0.14.3",
"description": "WeChat (Weixin) channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/channels/weixin/src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ function randomUin(): string {
return btoa(String.fromCharCode(...buf));
}

function buildHeaders(token?: string): Record<string, string> {
export function buildHeaders(token?: string): Record<string, string> {
const headers: Record<string, string> = {
'Content-Type': 'application/json',
'X-WECHAT-UIN': randomUin(),
Expand Down
4 changes: 3 additions & 1 deletion packages/channels/weixin/src/login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
* QR code login flow for WeChat iLink Bot.
*/

import { buildHeaders } from './api.js';

export interface LoginResult {
connected: boolean;
token?: string;
Expand Down Expand Up @@ -54,7 +56,7 @@ export async function waitForLogin(params: {
const resp = await fetch(
`${apiBaseUrl}/ilink/bot/get_qrcode_status?qrcode=${encodeURIComponent(currentQrcodeId)}`,
{
headers: { 'iLink-App-ClientVersion': '1' },
headers: buildHeaders(),
signal: controller.signal,
},
);
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/qwen-code",
"version": "0.14.2",
"version": "0.14.3",
"description": "Qwen Code",
"repository": {
"type": "git",
Expand Down Expand Up @@ -33,7 +33,7 @@
"dist"
],
"config": {
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.14.2"
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.14.3"
},
"dependencies": {
"@agentclientprotocol/sdk": "^0.14.1",
Expand Down
11 changes: 10 additions & 1 deletion packages/cli/src/commands/channel/start.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,16 @@ async function startSingle(name: string): Promise<void> {
const channel = createChannel(name, config, bridge, { router });
channels.set(name, channel);
registerToolCallDispatch(bridge, router, channels);
await channel.connect();

try {
await channel.connect();
} catch (err) {
writeStderrLine(
`Error: ${err instanceof Error ? err.message : String(err)}`,
);
bridge.stop();
process.exit(1);
}

writeServiceInfo([name]);
writeStdoutLine(`[Channel] "${name}" is running. Press Ctrl+C to stop.`);
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/config/keyBindings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export enum Command {
EXIT = 'exit',
SHOW_MORE_LINES = 'showMoreLines',
RETRY_LAST = 'retryLast',
TOGGLE_VERBOSE_MODE = 'toggleVerboseMode',
TOGGLE_COMPACT_MODE = 'toggleCompactMode',

// Shell commands
REVERSE_SEARCH = 'reverseSearch',
Expand Down Expand Up @@ -173,7 +173,7 @@ export const defaultKeyBindings: KeyBindingConfig = {
[Command.EXIT]: [{ key: 'd', ctrl: true }],
[Command.SHOW_MORE_LINES]: [{ key: 's', ctrl: true }],
[Command.RETRY_LAST]: [{ key: 'y', ctrl: true }],
[Command.TOGGLE_VERBOSE_MODE]: [{ key: 'o', ctrl: true }],
[Command.TOGGLE_COMPACT_MODE]: [{ key: 'o', ctrl: true }],

// Shell commands
[Command.REVERSE_SEARCH]: [{ key: 'r', ctrl: true }],
Expand Down
Loading
Loading