@mmmbuto/qwen-code-termux 0.14.0-termux → 0.14.3-termux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -152
- package/bundled/qc-helper/docs/configuration/settings.md +41 -16
- package/bundled/qc-helper/docs/features/_meta.ts +3 -0
- package/bundled/qc-helper/docs/features/approval-mode.md +16 -8
- package/bundled/qc-helper/docs/features/code-review.md +279 -0
- package/bundled/qc-helper/docs/features/commands.md +86 -3
- package/bundled/qc-helper/docs/features/followup-suggestions.md +109 -0
- package/bundled/qc-helper/docs/features/status-line.md +235 -0
- package/bundled/qc-helper/docs/overview.md +1 -0
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
- package/bundled/review/DESIGN.md +165 -0
- package/bundled/review/SKILL.md +358 -88
- package/cli.js +45987 -42820
- package/locales/de.js +29 -1
- package/locales/en.js +29 -1
- package/locales/ja.js +27 -1
- package/locales/pt.js +29 -1
- package/locales/ru.js +29 -1
- package/locales/zh.js +27 -1
- package/package.json +7 -3
- package/scripts/postinstall.cjs +12 -0
- package/bundled/qc-helper/docs/configuration.md +0 -73
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# Code Review
|
|
2
|
+
|
|
3
|
+
> Review code changes for correctness, security, performance, and code quality using `/review`.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Review local uncommitted changes
|
|
9
|
+
/review
|
|
10
|
+
|
|
11
|
+
# Review a pull request (by number or URL)
|
|
12
|
+
/review 123
|
|
13
|
+
/review https://github.com/org/repo/pull/123
|
|
14
|
+
|
|
15
|
+
# Review and post inline comments on the PR
|
|
16
|
+
/review 123 --comment
|
|
17
|
+
|
|
18
|
+
# Review a specific file
|
|
19
|
+
/review src/utils/auth.ts
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
If there are no uncommitted changes, `/review` will let you know and stop — no agents are launched.
|
|
23
|
+
|
|
24
|
+
## How It Works
|
|
25
|
+
|
|
26
|
+
The `/review` command runs a multi-stage pipeline:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Step 1: Determine scope (local diff / PR worktree / file)
|
|
30
|
+
Step 2: Load project review rules
|
|
31
|
+
Step 3: Run deterministic analysis (linter, typecheck) [zero LLM cost]
|
|
32
|
+
Step 4: 5 parallel review agents [5 LLM calls]
|
|
33
|
+
|-- Agent 1: Correctness & Security
|
|
34
|
+
|-- Agent 2: Code Quality
|
|
35
|
+
|-- Agent 3: Performance & Efficiency
|
|
36
|
+
|-- Agent 4: Undirected Audit
|
|
37
|
+
'-- Agent 5: Build & Test (runs shell commands)
|
|
38
|
+
Step 5: Deduplicate --> Batch verify --> Aggregate [1 LLM call]
|
|
39
|
+
Step 6: Reverse audit (find coverage gaps) [1 LLM call]
|
|
40
|
+
Step 7: Present findings + verdict
|
|
41
|
+
Step 8: Autofix (user-confirmed, optional)
|
|
42
|
+
Step 9: Post PR inline comments (if requested)
|
|
43
|
+
Step 10: Save report + incremental cache
|
|
44
|
+
Step 11: Clean up (remove worktree + temp files)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Review Agents
|
|
48
|
+
|
|
49
|
+
| Agent | Focus |
|
|
50
|
+
| --------------------------------- | ------------------------------------------------------------------ |
|
|
51
|
+
| Agent 1: Correctness & Security | Logic errors, null handling, race conditions, injection, XSS, SSRF |
|
|
52
|
+
| Agent 2: Code Quality | Style consistency, naming, duplication, dead code |
|
|
53
|
+
| Agent 3: Performance & Efficiency | N+1 queries, memory leaks, unnecessary re-renders, bundle size |
|
|
54
|
+
| Agent 4: Undirected Audit | Business logic, boundary interactions, hidden coupling |
|
|
55
|
+
| Agent 5: Build & Test | Runs build and test commands, reports failures |
|
|
56
|
+
|
|
57
|
+
All agents run in parallel. Findings from Agents 1-4 are verified in a **single batch verification pass** (one agent reviews all findings at once, keeping LLM calls fixed). After verification, a **reverse audit agent** re-reads the entire diff with knowledge of all confirmed findings to catch issues that every other agent missed. Reverse audit findings skip the verification step (the agent already has full context) and are included directly as high-confidence results.
|
|
58
|
+
|
|
59
|
+
## Deterministic Analysis
|
|
60
|
+
|
|
61
|
+
Before the LLM agents run, `/review` automatically runs your project's existing linters and type checkers:
|
|
62
|
+
|
|
63
|
+
| Language | Tools detected |
|
|
64
|
+
| --------------------- | ---------------------------------------------------------------- |
|
|
65
|
+
| TypeScript/JavaScript | `tsc --noEmit`, `npm run lint`, `eslint` |
|
|
66
|
+
| Python | `ruff`, `mypy`, `flake8` |
|
|
67
|
+
| Rust | `cargo clippy` |
|
|
68
|
+
| Go | `go vet`, `golangci-lint` |
|
|
69
|
+
| Java | `mvn compile`, `checkstyle`, `spotbugs`, `pmd` |
|
|
70
|
+
| C/C++ | `clang-tidy` (if `compile_commands.json` available) |
|
|
71
|
+
| Other | Auto-discovered from CI config (`.github/workflows/*.yml`, etc.) |
|
|
72
|
+
|
|
73
|
+
For projects that don't match standard patterns (e.g., OpenJDK), `/review` reads CI configuration files to discover what lint/check commands the project uses. No user configuration needed.
|
|
74
|
+
|
|
75
|
+
Deterministic findings are tagged with `[linter]` or `[typecheck]` and skip LLM verification — they are ground truth.
|
|
76
|
+
|
|
77
|
+
- **Errors** → Critical severity
|
|
78
|
+
- **Warnings** → Nice to have (terminal only, not posted as PR comments)
|
|
79
|
+
|
|
80
|
+
If a tool is not installed or times out, it is skipped with an informational note.
|
|
81
|
+
|
|
82
|
+
## Severity Levels
|
|
83
|
+
|
|
84
|
+
| Severity | Meaning | Posted as PR comment? |
|
|
85
|
+
| ---------------- | ------------------------------------------------------------------- | -------------------------- |
|
|
86
|
+
| **Critical** | Must fix before merging (bugs, security, data loss, build failures) | Yes (high-confidence only) |
|
|
87
|
+
| **Suggestion** | Recommended improvement | Yes (high-confidence only) |
|
|
88
|
+
| **Nice to have** | Optional optimization | No (terminal only) |
|
|
89
|
+
|
|
90
|
+
Low-confidence findings appear in a separate "Needs Human Review" section in the terminal and are never posted as PR comments.
|
|
91
|
+
|
|
92
|
+
## Autofix
|
|
93
|
+
|
|
94
|
+
After presenting findings, `/review` offers to auto-apply fixes for Critical and Suggestion findings that have clear solutions:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
Found 3 issues with auto-fixable suggestions. Apply auto-fixes? (y/n)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
- Fixes are applied using the `edit` tool (targeted replacements, not full-file rewrites)
|
|
101
|
+
- Per-file linter checks run after fixes to verify they don't introduce new issues
|
|
102
|
+
- For PR reviews, fixes are committed and pushed from the worktree automatically — your working tree stays clean
|
|
103
|
+
- Nice to have and low-confidence findings are never auto-fixed
|
|
104
|
+
- PR review submission always uses the **pre-fix verdict** (e.g., "Request changes") since the remote PR hasn't been updated until the autofix push completes
|
|
105
|
+
|
|
106
|
+
## Worktree Isolation
|
|
107
|
+
|
|
108
|
+
When reviewing a PR, `/review` creates a temporary git worktree (`.qwen/tmp/review-pr-<number>`) instead of switching your current branch. This means:
|
|
109
|
+
|
|
110
|
+
- Your working tree, staged changes, and current branch are **never touched**
|
|
111
|
+
- Dependencies are installed in the worktree (`npm ci`, etc.) so linting and build/test work
|
|
112
|
+
- Build and test commands run in isolation without polluting your local build cache
|
|
113
|
+
- If anything goes wrong, your environment is unaffected — just delete the worktree
|
|
114
|
+
- The worktree is automatically cleaned up after the review completes
|
|
115
|
+
- If a review is interrupted (Ctrl+C, crash), the next `/review` of the same PR automatically cleans up the stale worktree before starting fresh
|
|
116
|
+
- Review reports and cache are saved to the main project directory (not the worktree)
|
|
117
|
+
|
|
118
|
+
## Cross-repo PR Review
|
|
119
|
+
|
|
120
|
+
You can review PRs from other repositories by passing the full URL:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
/review https://github.com/other-org/other-repo/pull/456
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
This runs in **lightweight mode** — no worktree, no linter, no build/test, no autofix. The review is based on the diff text only (fetched via GitHub API). PR comments can still be posted if you have write access.
|
|
127
|
+
|
|
128
|
+
| Capability | Same-repo | Cross-repo |
|
|
129
|
+
| ------------------------------------------------ | --------- | ----------------------------- |
|
|
130
|
+
| LLM review (Agents 1-4 + verify + reverse audit) | ✅ | ✅ |
|
|
131
|
+
| Agent 5: Build & test | ✅ | ❌ (no local codebase) |
|
|
132
|
+
| Deterministic analysis (linter/typecheck) | ✅ | ❌ |
|
|
133
|
+
| Cross-file impact analysis | ✅ | ❌ |
|
|
134
|
+
| Autofix | ✅ | ❌ |
|
|
135
|
+
| PR inline comments | ✅ | ✅ (if you have write access) |
|
|
136
|
+
| Incremental review cache | ✅ | ❌ |
|
|
137
|
+
|
|
138
|
+
## PR Inline Comments
|
|
139
|
+
|
|
140
|
+
Use `--comment` to post findings directly on the PR:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
/review 123 --comment
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Or, after running `/review 123`, type `post comments` to publish findings without re-running the review.
|
|
147
|
+
|
|
148
|
+
**What gets posted:**
|
|
149
|
+
|
|
150
|
+
- High-confidence Critical and Suggestion findings as inline comments on specific lines
|
|
151
|
+
- For Approve/Request changes verdicts: a review summary with the verdict
|
|
152
|
+
- For Comment verdict with all inline comments posted: no separate summary (inline comments are sufficient)
|
|
153
|
+
- Model attribution footer on each comment (e.g., _— qwen3-coder via Qwen Code /review_)
|
|
154
|
+
|
|
155
|
+
**What stays terminal-only:**
|
|
156
|
+
|
|
157
|
+
- Nice to have findings (including linter warnings)
|
|
158
|
+
- Low-confidence findings
|
|
159
|
+
|
|
160
|
+
## Follow-up Actions
|
|
161
|
+
|
|
162
|
+
After the review, context-aware tips appear as ghost text. Press Tab to accept:
|
|
163
|
+
|
|
164
|
+
| State after review | Tip | What happens |
|
|
165
|
+
| ---------------------------------- | ------------------ | --------------------------------------- |
|
|
166
|
+
| Local review with unfixed findings | `fix these issues` | LLM interactively fixes each finding |
|
|
167
|
+
| PR review with findings | `post comments` | Posts PR inline comments (no re-review) |
|
|
168
|
+
| PR review, zero findings | `post comments` | Approves the PR on GitHub (LGTM) |
|
|
169
|
+
| Local review, all clear | `commit` | Commits your changes |
|
|
170
|
+
|
|
171
|
+
Note: `fix these issues` is only available for local reviews. For PR reviews, use Autofix (Step 8) — the worktree is cleaned up after the review, so post-review interactive fixing is not possible.
|
|
172
|
+
|
|
173
|
+
## Project Review Rules
|
|
174
|
+
|
|
175
|
+
You can customize review criteria per project. `/review` reads rules from these files (in order):
|
|
176
|
+
|
|
177
|
+
1. `.qwen/review-rules.md` (Qwen Code native)
|
|
178
|
+
2. `.github/copilot-instructions.md` (preferred) or `copilot-instructions.md` (fallback — only one is loaded, not both)
|
|
179
|
+
3. `AGENTS.md` — `## Code Review` section
|
|
180
|
+
4. `QWEN.md` — `## Code Review` section
|
|
181
|
+
|
|
182
|
+
Rules are injected into the LLM review agents (1-4) as additional criteria. For PR reviews, rules are read from the **base branch** to prevent a malicious PR from injecting bypass rules.
|
|
183
|
+
|
|
184
|
+
Example `.qwen/review-rules.md`:
|
|
185
|
+
|
|
186
|
+
```markdown
|
|
187
|
+
# Review Rules
|
|
188
|
+
|
|
189
|
+
- All API endpoints must validate authentication
|
|
190
|
+
- Database queries must use parameterized statements
|
|
191
|
+
- React components must not use inline styles
|
|
192
|
+
- Error messages must not expose internal paths
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Incremental Review
|
|
196
|
+
|
|
197
|
+
When reviewing a PR that was previously reviewed, `/review` only examines changes since the last review:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# First review — full review, cache created
|
|
201
|
+
/review 123
|
|
202
|
+
|
|
203
|
+
# PR updated with new commits — only new changes reviewed
|
|
204
|
+
/review 123
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Cross-model review
|
|
208
|
+
|
|
209
|
+
If you switch models (via `/model`) and re-review the same PR, `/review` detects the model change and runs a full review instead of skipping:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# Review with model A
|
|
213
|
+
/review 123
|
|
214
|
+
|
|
215
|
+
# Switch model
|
|
216
|
+
/model
|
|
217
|
+
|
|
218
|
+
# Review again — full review with model B (not skipped)
|
|
219
|
+
/review 123
|
|
220
|
+
# → "Previous review used qwen3-coder. Running full review with gpt-4o for a second opinion."
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Cache is stored in `.qwen/review-cache/` and tracks both the commit SHA and model ID. Make sure this directory is in your `.gitignore` (a broader rule like `.qwen/*` also works). If the cached commit was rebased away, it falls back to a full review.
|
|
224
|
+
|
|
225
|
+
## Review Reports
|
|
226
|
+
|
|
227
|
+
For same-repo reviews, results are saved as a Markdown file in your project's `.qwen/reviews/` directory (cross-repo lightweight reviews skip report persistence):
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
.qwen/reviews/2026-04-06-143022-pr-123.md
|
|
231
|
+
.qwen/reviews/2026-04-06-150510-local.md
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Reports include: timestamp, diff stats, deterministic analysis results, all findings with verification status, and the verdict.
|
|
235
|
+
|
|
236
|
+
## Cross-file Impact Analysis
|
|
237
|
+
|
|
238
|
+
When code changes modify exported functions, classes, or interfaces, the review agents automatically search for all callers and check compatibility:
|
|
239
|
+
|
|
240
|
+
- Parameter count/type changes
|
|
241
|
+
- Return type changes
|
|
242
|
+
- Removed or renamed public methods
|
|
243
|
+
- Breaking API changes
|
|
244
|
+
|
|
245
|
+
For large diffs (>10 modified symbols), analysis prioritizes functions with signature changes.
|
|
246
|
+
|
|
247
|
+
## Token Efficiency
|
|
248
|
+
|
|
249
|
+
The review pipeline uses a fixed number of LLM calls regardless of how many findings are produced:
|
|
250
|
+
|
|
251
|
+
| Stage | LLM calls | Notes |
|
|
252
|
+
| ------------------------------- | ---------- | --------------------------------------------------- |
|
|
253
|
+
| Deterministic analysis (Step 3) | 0 | Shell commands only |
|
|
254
|
+
| Review agents (Step 4) | 5 (or 4) | Run in parallel; Agent 5 skipped in cross-repo mode |
|
|
255
|
+
| Batch verification (Step 5) | 1 | Single agent verifies all findings at once |
|
|
256
|
+
| Reverse audit (Step 6) | 1 | Finds coverage gaps; findings skip verification |
|
|
257
|
+
| **Total** | **7 or 6** | Same-repo: 7; cross-repo: 6 (no Agent 5) |
|
|
258
|
+
|
|
259
|
+
## What's NOT Flagged
|
|
260
|
+
|
|
261
|
+
The review intentionally excludes:
|
|
262
|
+
|
|
263
|
+
- Pre-existing issues in unchanged code (focus on the diff only)
|
|
264
|
+
- Style/formatting/naming that matches your codebase conventions
|
|
265
|
+
- Issues a linter or type checker would catch (handled by deterministic analysis)
|
|
266
|
+
- Subjective "consider doing X" suggestions without a real problem
|
|
267
|
+
- Minor refactoring that doesn't fix a bug or risk
|
|
268
|
+
- Missing documentation unless the logic is genuinely confusing
|
|
269
|
+
- Issues already discussed in existing PR comments (avoids duplicating human feedback)
|
|
270
|
+
|
|
271
|
+
## Design Philosophy
|
|
272
|
+
|
|
273
|
+
> **Silence is better than noise.** Every comment should be worth the reader's time.
|
|
274
|
+
|
|
275
|
+
- If unsure whether something is a problem → don't report it
|
|
276
|
+
- Linter/typecheck issues are handled by tools, not LLM guesses
|
|
277
|
+
- Same pattern across N files → aggregated into one finding
|
|
278
|
+
- PR comments are high-confidence only
|
|
279
|
+
- Style/formatting issues matching codebase conventions are excluded
|
|
@@ -34,6 +34,7 @@ Commands for adjusting interface appearance and work environment.
|
|
|
34
34
|
| ------------ | ---------------------------------------- | ----------------------------- |
|
|
35
35
|
| `/clear` | Clear terminal screen content | `/clear` (shortcut: `Ctrl+L`) |
|
|
36
36
|
| `/context` | Show context window usage breakdown | `/context` |
|
|
37
|
+
| → `detail` | Show per-item context usage breakdown | `/context detail` |
|
|
37
38
|
| `/theme` | Change Qwen Code visual theme | `/theme` |
|
|
38
39
|
| `/vim` | Turn input area Vim editing mode on/off | `/vim` |
|
|
39
40
|
| `/directory` | Manage multi-directory support workspace | `/dir add ./src,./tests` |
|
|
@@ -61,16 +62,98 @@ Commands for managing AI tools and models.
|
|
|
61
62
|
| `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc` |
|
|
62
63
|
| `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
|
|
63
64
|
| `/skills` | List and run available skills | `/skills`, `/skills <name>` |
|
|
65
|
+
| `/plan` | Switch to plan mode or exit plan mode | `/plan`, `/plan <task>`, `/plan exit` |
|
|
64
66
|
| `/approval-mode` | Change approval mode for tool usage | `/approval-mode <mode (auto-edit)> --project` |
|
|
65
67
|
| →`plan` | Analysis only, no execution | Secure review |
|
|
66
68
|
| →`default` | Require approval for edits | Daily use |
|
|
67
69
|
| →`auto-edit` | Automatically approve edits | Trusted environment |
|
|
68
70
|
| →`yolo` | Automatically approve all | Quick prototyping |
|
|
69
71
|
| `/model` | Switch model used in current session | `/model` |
|
|
72
|
+
| `/model --fast` | Set a lighter model for prompt suggestions | `/model --fast qwen3-coder-flash` |
|
|
70
73
|
| `/extensions` | List all active extensions in current session | `/extensions` |
|
|
71
74
|
| `/memory` | Manage AI's instruction context | `/memory add Important Info` |
|
|
72
75
|
|
|
73
|
-
### 1.5
|
|
76
|
+
### 1.5 Built-in Skills
|
|
77
|
+
|
|
78
|
+
These commands invoke bundled skills that provide specialized workflows.
|
|
79
|
+
|
|
80
|
+
| Command | Description | Usage Examples |
|
|
81
|
+
| ------------ | ------------------------------------------------------------------- | ------------------------------------------------- |
|
|
82
|
+
| `/review` | Review code changes with 5 parallel agents + deterministic analysis | `/review`, `/review 123`, `/review 123 --comment` |
|
|
83
|
+
| `/loop` | Run a prompt on a recurring schedule | `/loop 5m check the build` |
|
|
84
|
+
| `/qc-helper` | Answer questions about Qwen Code usage and configuration | `/qc-helper how do I configure MCP?` |
|
|
85
|
+
|
|
86
|
+
See [Code Review](./code-review.md) for full `/review` documentation.
|
|
87
|
+
|
|
88
|
+
### 1.6 Side Question (`/btw`)
|
|
89
|
+
|
|
90
|
+
The `/btw` command allows you to ask quick side questions without interrupting or affecting the main conversation flow.
|
|
91
|
+
|
|
92
|
+
| Command | Description |
|
|
93
|
+
| ---------------------- | ------------------------------------- |
|
|
94
|
+
| `/btw <your question>` | Ask a quick side question |
|
|
95
|
+
| `?btw <your question>` | Alternative syntax for side questions |
|
|
96
|
+
|
|
97
|
+
**How It Works:**
|
|
98
|
+
|
|
99
|
+
- The side question is sent as a separate API call with recent conversation context (up to the last 20 messages)
|
|
100
|
+
- The response is displayed above the Composer — you can continue typing while waiting
|
|
101
|
+
- The main conversation is **not blocked** — it continues independently
|
|
102
|
+
- The side question response does **not** become part of the main conversation history
|
|
103
|
+
- Answers are rendered with full Markdown support (code blocks, lists, tables, etc.)
|
|
104
|
+
|
|
105
|
+
**Keyboard Shortcuts (Interactive Mode):**
|
|
106
|
+
|
|
107
|
+
| Shortcut | Action |
|
|
108
|
+
| -------------------- | --------------------------------------------------- |
|
|
109
|
+
| `Escape` | Cancel (while loading) or dismiss (after completed) |
|
|
110
|
+
| `Space` or `Enter` | Dismiss the answer (when input is empty) |
|
|
111
|
+
| `Ctrl+C` or `Ctrl+D` | Cancel an in-flight side question |
|
|
112
|
+
|
|
113
|
+
**Example:**
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
(While the main conversation is about refactoring code)
|
|
117
|
+
|
|
118
|
+
> /btw What's the difference between let and var in JavaScript?
|
|
119
|
+
|
|
120
|
+
╭──────────────────────────────────────────╮
|
|
121
|
+
│ /btw What's the difference between let │
|
|
122
|
+
│ and var in JavaScript? │
|
|
123
|
+
│ │
|
|
124
|
+
│ + Answering... │
|
|
125
|
+
│ Press Escape, Ctrl+C, or Ctrl+D to cancel│
|
|
126
|
+
╰──────────────────────────────────────────╯
|
|
127
|
+
> (Composer remains active — keep typing)
|
|
128
|
+
|
|
129
|
+
(After the answer arrives)
|
|
130
|
+
|
|
131
|
+
╭──────────────────────────────────────────╮
|
|
132
|
+
│ /btw What's the difference between let │
|
|
133
|
+
│ and var in JavaScript? │
|
|
134
|
+
│ │
|
|
135
|
+
│ `let` is block-scoped, while `var` is │
|
|
136
|
+
│ function-scoped. `let` was introduced │
|
|
137
|
+
│ in ES6 and doesn't hoist the same way. │
|
|
138
|
+
│ │
|
|
139
|
+
│ Press Space, Enter, or Escape to dismiss │
|
|
140
|
+
╰──────────────────────────────────────────╯
|
|
141
|
+
> (Composer still active)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Supported Execution Modes:**
|
|
145
|
+
|
|
146
|
+
| Mode | Behavior |
|
|
147
|
+
| -------------------- | -------------------------------------------- |
|
|
148
|
+
| Interactive | Shows above Composer with Markdown rendering |
|
|
149
|
+
| Non-interactive | Returns text result: `btw> question\nanswer` |
|
|
150
|
+
| ACP (Agent Protocol) | Returns stream_messages async generator |
|
|
151
|
+
|
|
152
|
+
> [!tip]
|
|
153
|
+
>
|
|
154
|
+
> Use `/btw` when you need a quick answer without derailing your main task. It's especially useful for clarifying concepts, checking facts, or getting quick explanations while staying focused on your primary workflow.
|
|
155
|
+
|
|
156
|
+
### 1.7 Information, Settings, and Help
|
|
74
157
|
|
|
75
158
|
Commands for obtaining information and performing system settings.
|
|
76
159
|
|
|
@@ -85,7 +168,7 @@ Commands for obtaining information and performing system settings.
|
|
|
85
168
|
| `/copy` | Copy last output content to clipboard | `/copy` |
|
|
86
169
|
| `/quit` | Exit Qwen Code immediately | `/quit` or `/exit` |
|
|
87
170
|
|
|
88
|
-
### 1.
|
|
171
|
+
### 1.8 Common Shortcuts
|
|
89
172
|
|
|
90
173
|
| Shortcut | Function | Note |
|
|
91
174
|
| ------------------ | ----------------------- | ---------------------- |
|
|
@@ -95,7 +178,7 @@ Commands for obtaining information and performing system settings.
|
|
|
95
178
|
| `Ctrl/cmd+Z` | Undo input | Text editing |
|
|
96
179
|
| `Ctrl/cmd+Shift+Z` | Redo input | Text editing |
|
|
97
180
|
|
|
98
|
-
### 1.
|
|
181
|
+
### 1.9 CLI Auth Subcommands
|
|
99
182
|
|
|
100
183
|
In addition to the in-session `/auth` slash command, Qwen Code provides standalone CLI subcommands for managing authentication directly from the terminal:
|
|
101
184
|
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Followup Suggestions
|
|
2
|
+
|
|
3
|
+
Qwen Code can predict what you want to type next and show it as ghost text in the input area. This feature uses an LLM call to analyze the conversation context and generate a natural next step suggestion.
|
|
4
|
+
|
|
5
|
+
This feature works end-to-end in the CLI. In the WebUI, the hook and UI plumbing are available, but host applications must trigger suggestion generation and wire the followup state for suggestions to appear.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
After Qwen Code finishes responding, a suggestion appears as dimmed text in the input area after a short delay (~300ms). For example, after fixing a bug, you might see:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
> run the tests
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The suggestion is generated by sending the conversation history to the model, which predicts what you would naturally type next. If the response contains an explicit tip (e.g., `Tip: type post comments to publish findings`), the suggested action is extracted automatically.
|
|
16
|
+
|
|
17
|
+
## Accepting Suggestions
|
|
18
|
+
|
|
19
|
+
| Key | Action |
|
|
20
|
+
| ------------- | ------------------------------------------------ |
|
|
21
|
+
| `Tab` | Accept the suggestion and fill it into the input |
|
|
22
|
+
| `Enter` | Accept the suggestion and submit it immediately |
|
|
23
|
+
| `Right Arrow` | Accept the suggestion and fill it into the input |
|
|
24
|
+
| Any typing | Dismiss the suggestion and type normally |
|
|
25
|
+
|
|
26
|
+
## When Suggestions Appear
|
|
27
|
+
|
|
28
|
+
Suggestions are generated when all of the following conditions are met:
|
|
29
|
+
|
|
30
|
+
- The model has completed its response (not during streaming)
|
|
31
|
+
- At least 2 model turns have occurred in the conversation
|
|
32
|
+
- There are no errors in the most recent response
|
|
33
|
+
- No confirmation dialogs are pending (e.g., shell confirmation, permissions)
|
|
34
|
+
- The approval mode is not set to `plan`
|
|
35
|
+
- The feature is enabled in settings (enabled by default)
|
|
36
|
+
|
|
37
|
+
Suggestions will not appear in non-interactive mode (e.g., headless/SDK mode).
|
|
38
|
+
|
|
39
|
+
Suggestions are automatically dismissed when:
|
|
40
|
+
|
|
41
|
+
- You start typing
|
|
42
|
+
- A new model turn begins
|
|
43
|
+
- The suggestion is accepted
|
|
44
|
+
|
|
45
|
+
## Fast Model
|
|
46
|
+
|
|
47
|
+
By default, suggestions use the same model as your main conversation. For faster and cheaper suggestions, configure a dedicated fast model:
|
|
48
|
+
|
|
49
|
+
### Via command
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
/model --fast qwen3-coder-flash
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Or use `/model --fast` (without a model name) to open a selection dialog.
|
|
56
|
+
|
|
57
|
+
### Via settings.json
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"fastModel": "qwen3-coder-flash"
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The fast model is used for prompt suggestions and speculative execution. When not configured, the main conversation model is used as fallback.
|
|
66
|
+
|
|
67
|
+
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.
|
|
68
|
+
|
|
69
|
+
## Configuration
|
|
70
|
+
|
|
71
|
+
These settings can be configured in `settings.json`:
|
|
72
|
+
|
|
73
|
+
| Setting | Type | Default | Description |
|
|
74
|
+
| ------------------------------ | ------- | ------- | ------------------------------------------------------------------ |
|
|
75
|
+
| `ui.enableFollowupSuggestions` | boolean | `true` | Enable or disable followup suggestions |
|
|
76
|
+
| `ui.enableCacheSharing` | boolean | `true` | Use cache-aware forked queries to reduce cost (experimental) |
|
|
77
|
+
| `ui.enableSpeculation` | boolean | `false` | Speculatively execute suggestions before submission (experimental) |
|
|
78
|
+
| `fastModel` | string | `""` | Model for prompt suggestions and speculative execution |
|
|
79
|
+
|
|
80
|
+
### Example
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"fastModel": "qwen3-coder-flash",
|
|
85
|
+
"ui": {
|
|
86
|
+
"enableFollowupSuggestions": true,
|
|
87
|
+
"enableCacheSharing": true
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Monitoring
|
|
93
|
+
|
|
94
|
+
Suggestion model usage appears in `/stats` output, showing tokens consumed by the fast model for suggestion generation.
|
|
95
|
+
|
|
96
|
+
The fast model is also shown in `/about` output under "Fast Model".
|
|
97
|
+
|
|
98
|
+
## Suggestion Quality
|
|
99
|
+
|
|
100
|
+
Suggestions go through quality filters to ensure they are useful:
|
|
101
|
+
|
|
102
|
+
- Must be 2-12 words (CJK: 2-30 characters), under 100 characters total
|
|
103
|
+
- Cannot be evaluative ("looks good", "thanks")
|
|
104
|
+
- Cannot use AI voice ("Let me...", "I'll...")
|
|
105
|
+
- Cannot be multiple sentences or contain formatting (markdown, newlines)
|
|
106
|
+
- Cannot be meta-commentary ("nothing to suggest", "silence")
|
|
107
|
+
- Cannot be error messages or prefixed labels ("Suggestion: ...")
|
|
108
|
+
- Single-word suggestions are only allowed for common commands (yes, commit, push, etc.)
|
|
109
|
+
- Slash commands (e.g., `/commit`) are always allowed as single-word suggestions
|