@protolabsai/proto 0.14.0 → 0.16.0
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 +91 -9
- package/{dist/bundled → bundled}/qc-helper/docs/configuration/settings.md +9 -0
- package/{dist/bundled → bundled}/qc-helper/docs/extension/extension-releasing.md +85 -2
- package/{dist/bundled → bundled}/qc-helper/docs/extension/introduction.md +34 -6
- package/{dist/bundled → bundled}/qc-helper/docs/features/_meta.ts +1 -0
- package/{dist/bundled → bundled}/qc-helper/docs/features/commands.md +14 -13
- package/bundled/qc-helper/docs/features/followup-suggestions.md +109 -0
- package/{dist/bundled → bundled}/qc-helper/docs/features/hooks.md +13 -0
- package/{dist/bundled → bundled}/qc-helper/docs/overview.md +1 -0
- package/{dist/cli.js → cli.js} +68000 -62616
- package/locales/de.js +1965 -0
- package/locales/en.js +2006 -0
- package/locales/ja.js +1459 -0
- package/locales/pt.js +1957 -0
- package/locales/ru.js +1964 -0
- package/locales/zh.js +1811 -0
- package/package.json +40 -123
- /package/{dist/bundled → bundled}/adversarial-verification/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/brainstorming/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/coding-agent-standards/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/dispatching-parallel-agents/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/executing-plans/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/finishing-a-development-branch/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/loop/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/_meta.ts +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/common-workflow.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/configuration/_meta.ts +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/configuration/auth.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/configuration/memory.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/configuration/model-providers.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/configuration/qwen-ignore.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/configuration/themes.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/configuration/trusted-folders.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/extension/_meta.ts +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/extension/getting-started-extensions.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/approval-mode.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/arena.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/checkpointing.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/headless.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/language.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/lsp.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/mcp.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/sandbox.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/scheduled-tasks.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/skills.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/sub-agents.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/features/token-caching.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/ide-integration/_meta.ts +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/ide-integration/ide-companion-spec.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/ide-integration/ide-integration.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/integration-github-action.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/integration-jetbrains.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/integration-vscode.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/integration-zed.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/quickstart.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/reference/_meta.ts +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/reference/keyboard-shortcuts.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/reference/sdk-api.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/support/Uninstall.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/support/_meta.ts +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/support/tos-privacy.md +0 -0
- /package/{dist/bundled → bundled}/qc-helper/docs/support/troubleshooting.md +0 -0
- /package/{dist/bundled → bundled}/receiving-code-review/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/requesting-code-review/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/review/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/subagent-driven-development/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/subagent-driven-development/code-quality-reviewer-prompt.md +0 -0
- /package/{dist/bundled → bundled}/subagent-driven-development/implementer-prompt.md +0 -0
- /package/{dist/bundled → bundled}/subagent-driven-development/spec-reviewer-prompt.md +0 -0
- /package/{dist/bundled → bundled}/systematic-debugging/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/test-driven-development/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/using-git-worktrees/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/using-superpowers/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/verification-before-completion/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/writing-plans/SKILL.md +0 -0
- /package/{dist/bundled → bundled}/writing-skills/SKILL.md +0 -0
- /package/{dist/sandbox-macos-permissive-closed.sb → sandbox-macos-permissive-closed.sb} +0 -0
- /package/{dist/sandbox-macos-permissive-open.sb → sandbox-macos-permissive-open.sb} +0 -0
- /package/{dist/sandbox-macos-permissive-proxied.sb → sandbox-macos-permissive-proxied.sb} +0 -0
- /package/{dist/sandbox-macos-restrictive-closed.sb → sandbox-macos-restrictive-closed.sb} +0 -0
- /package/{dist/sandbox-macos-restrictive-open.sb → sandbox-macos-restrictive-open.sb} +0 -0
- /package/{dist/sandbox-macos-restrictive-proxied.sb → sandbox-macos-restrictive-proxied.sb} +0 -0
- /package/{dist/vendor → vendor}/ripgrep/COPYING +0 -0
- /package/{dist/vendor → vendor}/ripgrep/arm64-darwin/rg +0 -0
- /package/{dist/vendor → vendor}/ripgrep/arm64-linux/rg +0 -0
- /package/{dist/vendor → vendor}/ripgrep/x64-darwin/rg +0 -0
- /package/{dist/vendor → vendor}/ripgrep/x64-linux/rg +0 -0
- /package/{dist/vendor → vendor}/ripgrep/x64-win32/rg.exe +0 -0
- /package/{dist/vendor → vendor}/tree-sitter/tree-sitter-bash.wasm +0 -0
- /package/{dist/vendor → vendor}/tree-sitter/tree-sitter.wasm +0 -0
package/README.md
CHANGED
|
@@ -23,16 +23,16 @@ proto is a fork of [Qwen Code](https://github.com/QwenLM/qwen-code) (itself fork
|
|
|
23
23
|
Requires Node.js 20+ and Rust toolchain (for beads_rust).
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
#
|
|
26
|
+
# Install from npm (recommended)
|
|
27
|
+
npm install -g @protolabsai/proto
|
|
28
|
+
proto --version
|
|
29
|
+
|
|
30
|
+
# Or install from source
|
|
27
31
|
git clone https://github.com/protoLabsAI/protoCLI.git
|
|
28
32
|
cd protoCLI
|
|
29
|
-
npm install
|
|
30
|
-
npm run build
|
|
31
|
-
|
|
32
|
-
# Link globally
|
|
33
|
-
npm link
|
|
33
|
+
npm install && npm run build && npm link
|
|
34
34
|
|
|
35
|
-
#
|
|
35
|
+
# Optional: task manager for persistent task tracking
|
|
36
36
|
cargo install beads_rust
|
|
37
37
|
```
|
|
38
38
|
|
|
@@ -159,6 +159,56 @@ Tools are exposed as `mcp__<server_name>__<tool_name>` and available to the agen
|
|
|
159
159
|
|
|
160
160
|
proto auto-discovers Claude Code plugins installed at `~/.claude/plugins/`. Any plugin's `commands/` directory is automatically loaded as slash commands — no additional config needed.
|
|
161
161
|
|
|
162
|
+
## Observability
|
|
163
|
+
|
|
164
|
+
proto supports [Langfuse](https://langfuse.com) tracing out of the box. Set three environment variables and every session is fully traced — LLM calls (all providers), tool executions, subagent lifecycles, and turn hierarchy.
|
|
165
|
+
|
|
166
|
+
### Setup
|
|
167
|
+
|
|
168
|
+
Add to the `env` block in `~/.proto/settings.json`:
|
|
169
|
+
|
|
170
|
+
```json
|
|
171
|
+
{
|
|
172
|
+
"env": {
|
|
173
|
+
"LANGFUSE_PUBLIC_KEY": "pk-lf-...",
|
|
174
|
+
"LANGFUSE_SECRET_KEY": "sk-lf-...",
|
|
175
|
+
"LANGFUSE_BASE_URL": "https://cloud.langfuse.com"
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
`LANGFUSE_BASE_URL` is optional and defaults to `https://cloud.langfuse.com`. For a self-hosted instance, set it to your deployment URL.
|
|
181
|
+
|
|
182
|
+
> **Why `settings.json` and not `.env`?** proto walks up from your CWD loading `.env` files, so a project-level `.env` with Langfuse keys would bleed into proto's tracing and mix your traces into the wrong dataset. The `env` block in `settings.json` is proto-namespaced and completely isolated from your projects.
|
|
183
|
+
|
|
184
|
+
### What gets traced
|
|
185
|
+
|
|
186
|
+
| Span | Attributes |
|
|
187
|
+
| --------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
188
|
+
| `turn` | `session.id`, `turn.id` — root span per user prompt |
|
|
189
|
+
| `gen_ai chat {model}` | `gen_ai.usage.input_tokens`, `gen_ai.usage.output_tokens`, `gen_ai.request.model` — one per LLM call |
|
|
190
|
+
| `tool/{name}` | `tool.name`, `tool.type`, `tool.duration_ms` — one per tool execution |
|
|
191
|
+
| `agent/{name}` | `agent.name`, `agent.status`, `agent.duration_ms` — one per subagent |
|
|
192
|
+
|
|
193
|
+
All three provider backends are covered: OpenAI-compatible, Anthropic, and Gemini.
|
|
194
|
+
|
|
195
|
+
### Prompt content logging
|
|
196
|
+
|
|
197
|
+
Full prompt messages and response text are included in traces by default. To disable:
|
|
198
|
+
|
|
199
|
+
```json
|
|
200
|
+
// ~/.proto/settings.json
|
|
201
|
+
{
|
|
202
|
+
"telemetry": { "logPrompts": false }
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
> **Privacy note:** `logPrompts` is enabled by default. When enabled, full prompt and response content is sent to your Langfuse instance. Set to `false` if you want traces without message content.
|
|
207
|
+
|
|
208
|
+
### Langfuse activates independently
|
|
209
|
+
|
|
210
|
+
Langfuse tracing activates from env vars alone — it does not require `telemetry.enabled: true` in settings. The general telemetry pipeline (OTLP/GCP) and Langfuse are independent.
|
|
211
|
+
|
|
162
212
|
## Task Management
|
|
163
213
|
|
|
164
214
|
proto integrates [beads_rust](https://github.com/Dicklesworthstone/beads_rust) for persistent, SQLite-backed task tracking. When `br` is on PATH, the 6 task tools (`task_create`, `task_get`, `task_list`, `task_update`, `task_stop`, `task_output`) use it as the backend. Tasks persist across sessions in `.beads/` within the project directory.
|
|
@@ -261,9 +311,41 @@ Use `/skills` to list available skills in a session.
|
|
|
261
311
|
| `Ctrl+D` | Exit (on empty line) |
|
|
262
312
|
| `Up/Down` | Navigate command history |
|
|
263
313
|
|
|
264
|
-
##
|
|
314
|
+
## Voice Integration
|
|
315
|
+
|
|
316
|
+
proto supports push-to-talk voice input. Press the mic button in the footer or use `/voice` to toggle.
|
|
317
|
+
|
|
318
|
+
### Requirements
|
|
319
|
+
|
|
320
|
+
Voice capture requires a system audio backend:
|
|
321
|
+
|
|
322
|
+
| OS | Backend | Install |
|
|
323
|
+
| ----- | ------- | ------------------------------------- |
|
|
324
|
+
| macOS | sox | `brew install sox` |
|
|
325
|
+
| Linux | sox | `apt install sox` / `dnf install sox` |
|
|
326
|
+
| Linux | arecord | `apt install alsa-utils` (fallback) |
|
|
327
|
+
|
|
328
|
+
Verify detection: `/voice status`
|
|
329
|
+
|
|
330
|
+
### STT backend
|
|
331
|
+
|
|
332
|
+
Voice input transcribes audio via a Whisper-compatible `/v1/audio/transcriptions` endpoint. Self-host one (e.g. [faster-whisper-server](https://github.com/fedirz/faster-whisper-server)):
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
docker run --gpus all -p 8000:8000 fedirz/faster-whisper-server:latest-cuda
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
```json
|
|
339
|
+
// ~/.proto/settings.json
|
|
340
|
+
{
|
|
341
|
+
"voice": {
|
|
342
|
+
"enabled": true,
|
|
343
|
+
"sttEndpoint": "http://localhost:8000/v1/audio/transcriptions"
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
```
|
|
265
347
|
|
|
266
|
-
|
|
348
|
+
The default endpoint is `http://localhost:8000/v1/audio/transcriptions` if none is configured.
|
|
267
349
|
|
|
268
350
|
## Architecture
|
|
269
351
|
|
|
@@ -109,6 +109,9 @@ Settings are organized into categories. All settings should be placed within the
|
|
|
109
109
|
| `ui.accessibility.enableLoadingPhrases` | boolean | Enable loading phrases (disable for accessibility). | `true` |
|
|
110
110
|
| `ui.accessibility.screenReader` | boolean | Enables screen reader mode, which adjusts the TUI for better compatibility with screen readers. | `false` |
|
|
111
111
|
| `ui.customWittyPhrases` | array of strings | A list of custom phrases to display during loading states. When provided, the CLI will cycle through these phrases instead of the default ones. | `[]` |
|
|
112
|
+
| `ui.enableFollowupSuggestions` | boolean | Enable [followup suggestions](../features/followup-suggestions) that predict what you want to type next after the model responds. Suggestions appear as ghost text and can be accepted with Tab, Enter, or Right Arrow. | `true` |
|
|
113
|
+
| `ui.enableCacheSharing` | boolean | Use cache-aware forked queries for suggestion generation. Reduces cost on providers that support prefix caching (experimental). | `true` |
|
|
114
|
+
| `ui.enableSpeculation` | boolean | Speculatively execute accepted suggestions before submission. Results appear instantly when you accept (experimental). | `false` |
|
|
112
115
|
|
|
113
116
|
#### ide
|
|
114
117
|
|
|
@@ -185,6 +188,12 @@ The `extra_body` field allows you to add custom parameters to the request body s
|
|
|
185
188
|
- `"./custom-logs"` - Logs to `./custom-logs` relative to current directory
|
|
186
189
|
- `"/tmp/openai-logs"` - Logs to absolute path `/tmp/openai-logs`
|
|
187
190
|
|
|
191
|
+
#### fastModel
|
|
192
|
+
|
|
193
|
+
| Setting | Type | Description | Default |
|
|
194
|
+
| ----------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
|
|
195
|
+
| `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`. | `""` |
|
|
196
|
+
|
|
188
197
|
#### context
|
|
189
198
|
|
|
190
199
|
| Setting | Type | Description | Default |
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# Extension Releasing
|
|
2
2
|
|
|
3
|
-
There are
|
|
3
|
+
There are three primary ways of releasing extensions to users:
|
|
4
4
|
|
|
5
5
|
- [Git repository](#releasing-through-a-git-repository)
|
|
6
6
|
- [Github Releases](#releasing-through-github-releases)
|
|
7
|
+
- [npm Registry](#releasing-through-npm-registry)
|
|
7
8
|
|
|
8
|
-
Git repository releases tend to be the simplest and most flexible approach, while GitHub releases can be more efficient on initial install as they are shipped as single archives instead of requiring a git clone which downloads each file individually. Github releases may also contain platform specific archives if you need to ship platform specific binary files.
|
|
9
|
+
Git repository releases tend to be the simplest and most flexible approach, while GitHub releases can be more efficient on initial install as they are shipped as single archives instead of requiring a git clone which downloads each file individually. Github releases may also contain platform specific archives if you need to ship platform specific binary files. npm registry releases are ideal for teams that already use npm for package distribution, especially with private registries.
|
|
9
10
|
|
|
10
11
|
## Releasing through a git repository
|
|
11
12
|
|
|
@@ -119,3 +120,85 @@ jobs:
|
|
|
119
120
|
release/linux.arm64.my-tool.tar.gz
|
|
120
121
|
release/win32.arm64.my-tool.zip
|
|
121
122
|
```
|
|
123
|
+
|
|
124
|
+
## Releasing through npm registry
|
|
125
|
+
|
|
126
|
+
You can publish Qwen Code extensions as scoped npm packages (e.g. `@your-org/my-extension`). This is a good fit when:
|
|
127
|
+
|
|
128
|
+
- Your team already uses npm for package distribution
|
|
129
|
+
- You need private registry support with existing auth infrastructure
|
|
130
|
+
- You want version resolution and access control handled by npm
|
|
131
|
+
|
|
132
|
+
### Package requirements
|
|
133
|
+
|
|
134
|
+
Your npm package must include a `qwen-extension.json` file at the package root. This is the same config file used by all Qwen Code extensions — the npm tarball is simply another delivery mechanism.
|
|
135
|
+
|
|
136
|
+
A minimal package structure looks like:
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
my-extension/
|
|
140
|
+
├── package.json
|
|
141
|
+
├── qwen-extension.json
|
|
142
|
+
├── QWEN.md # optional context file
|
|
143
|
+
├── commands/ # optional custom commands
|
|
144
|
+
├── skills/ # optional custom skills
|
|
145
|
+
└── agents/ # optional custom subagents
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Make sure `qwen-extension.json` is included in your published package (i.e. not excluded by `.npmignore` or the `files` field in `package.json`).
|
|
149
|
+
|
|
150
|
+
### Publishing
|
|
151
|
+
|
|
152
|
+
Use standard npm publishing tools:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Publish to the default registry
|
|
156
|
+
npm publish
|
|
157
|
+
|
|
158
|
+
# Publish to a private/custom registry
|
|
159
|
+
npm publish --registry https://your-registry.com
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Installation
|
|
163
|
+
|
|
164
|
+
Users install your extension using the scoped package name:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# Install latest version
|
|
168
|
+
qwen extensions install @your-org/my-extension
|
|
169
|
+
|
|
170
|
+
# Install a specific version
|
|
171
|
+
qwen extensions install @your-org/my-extension@1.2.0
|
|
172
|
+
|
|
173
|
+
# Install from a custom registry
|
|
174
|
+
qwen extensions install @your-org/my-extension --registry https://your-registry.com
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Update behavior
|
|
178
|
+
|
|
179
|
+
- Extensions installed without a version pin (e.g. `@scope/pkg`) track the `latest` dist-tag.
|
|
180
|
+
- Extensions installed with a dist-tag (e.g. `@scope/pkg@beta`) track that specific tag.
|
|
181
|
+
- Extensions pinned to an exact version (e.g. `@scope/pkg@1.2.0`) are always considered up-to-date and will not prompt for updates.
|
|
182
|
+
|
|
183
|
+
### Authentication for private registries
|
|
184
|
+
|
|
185
|
+
Qwen Code reads npm auth credentials automatically:
|
|
186
|
+
|
|
187
|
+
1. **`NPM_TOKEN` environment variable** — highest priority
|
|
188
|
+
2. **`.npmrc` file** — supports both host-level and path-scoped `_authToken` entries (e.g. `//your-registry.com/:_authToken=TOKEN` or `//pkgs.dev.azure.com/org/_packaging/feed/npm/registry/:_authToken=TOKEN`)
|
|
189
|
+
|
|
190
|
+
`.npmrc` files are read from the current directory and the user's home directory.
|
|
191
|
+
|
|
192
|
+
### Managing release channels
|
|
193
|
+
|
|
194
|
+
You can use npm dist-tags to manage release channels:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Publish a beta release
|
|
198
|
+
npm publish --tag beta
|
|
199
|
+
|
|
200
|
+
# Users install beta channel
|
|
201
|
+
qwen extensions install @your-org/my-extension@beta
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
This works similarly to git branch-based release channels but uses npm's native dist-tag mechanism.
|
|
@@ -12,11 +12,11 @@ We offer a suite of extension management tools using both `qwen extensions` CLI
|
|
|
12
12
|
|
|
13
13
|
You can manage extensions at runtime within the interactive CLI using `/extensions` slash commands. These commands support hot-reloading, meaning changes take effect immediately without restarting the application.
|
|
14
14
|
|
|
15
|
-
| Command | Description
|
|
16
|
-
| ------------------------------------- |
|
|
17
|
-
| `/extensions` or `/extensions manage` | Manage all installed extensions
|
|
18
|
-
| `/extensions install <source>` | Install an extension from a git URL, local path, or marketplace
|
|
19
|
-
| `/extensions explore [source]` | Open extensions source page(Gemini or ClaudeCode) in your browser
|
|
15
|
+
| Command | Description |
|
|
16
|
+
| ------------------------------------- | ---------------------------------------------------------------------------- |
|
|
17
|
+
| `/extensions` or `/extensions manage` | Manage all installed extensions |
|
|
18
|
+
| `/extensions install <source>` | Install an extension from a git URL, local path, npm package, or marketplace |
|
|
19
|
+
| `/extensions explore [source]` | Open extensions source page(Gemini or ClaudeCode) in your browser |
|
|
20
20
|
|
|
21
21
|
### CLI Extension Management
|
|
22
22
|
|
|
@@ -89,6 +89,34 @@ Gemini extensions are automatically converted to Qwen Code format during install
|
|
|
89
89
|
- TOML command files are automatically migrated to Markdown format
|
|
90
90
|
- MCP servers, context files, and settings are preserved
|
|
91
91
|
|
|
92
|
+
#### From npm Registry
|
|
93
|
+
|
|
94
|
+
Qwen Code supports installing extensions from npm registries using scoped package names. This is ideal for teams with private registries that already have auth, versioning, and publishing infrastructure in place.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Install the latest version
|
|
98
|
+
qwen extensions install @scope/my-extension
|
|
99
|
+
|
|
100
|
+
# Install a specific version
|
|
101
|
+
qwen extensions install @scope/my-extension@1.2.0
|
|
102
|
+
|
|
103
|
+
# Install from a custom registry
|
|
104
|
+
qwen extensions install @scope/my-extension --registry https://your-registry.com
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Only scoped packages (`@scope/package-name`) are supported to avoid ambiguity with the `owner/repo` GitHub shorthand format.
|
|
108
|
+
|
|
109
|
+
**Registry resolution** follows this priority:
|
|
110
|
+
|
|
111
|
+
1. `--registry` CLI flag (explicit override)
|
|
112
|
+
2. Scoped registry from `.npmrc` (e.g. `@scope:registry=https://...`)
|
|
113
|
+
3. Default registry from `.npmrc`
|
|
114
|
+
4. Fallback: `https://registry.npmjs.org/`
|
|
115
|
+
|
|
116
|
+
**Authentication** is handled automatically via the `NPM_TOKEN` environment variable or registry-specific `_authToken` entries in your `.npmrc` file.
|
|
117
|
+
|
|
118
|
+
> **Note:** npm extensions must include a `qwen-extension.json` file at the package root, following the same format as any other Qwen Code extension. See [Extension Releasing](./extension-releasing.md#releasing-through-npm-registry) for packaging details.
|
|
119
|
+
|
|
92
120
|
#### From Git Repository
|
|
93
121
|
|
|
94
122
|
```bash
|
|
@@ -127,7 +155,7 @@ This is useful if you have an extension disabled at the top-level and only enabl
|
|
|
127
155
|
|
|
128
156
|
### Updating an extension
|
|
129
157
|
|
|
130
|
-
For extensions installed from a local path
|
|
158
|
+
For extensions installed from a local path, a git repository, or an npm registry, you can explicitly update to the latest version with `qwen extensions update extension-name`. For npm extensions installed without a version pin (e.g. `@scope/pkg`), updates check the `latest` dist-tag. For those installed with a specific dist-tag (e.g. `@scope/pkg@beta`), updates track that tag. Extensions pinned to an exact version (e.g. `@scope/pkg@1.2.0`) are always considered up-to-date.
|
|
131
159
|
|
|
132
160
|
You can update all extensions with:
|
|
133
161
|
|
|
@@ -56,19 +56,20 @@ Commands specifically for controlling interface and output language.
|
|
|
56
56
|
|
|
57
57
|
Commands for managing AI tools and models.
|
|
58
58
|
|
|
59
|
-
| Command | Description
|
|
60
|
-
| ---------------- |
|
|
61
|
-
| `/mcp` | List configured MCP servers and tools
|
|
62
|
-
| `/tools` | Display currently available tool list
|
|
63
|
-
| `/skills` | List and run available skills
|
|
64
|
-
| `/approval-mode` | Change approval mode for tool usage
|
|
65
|
-
| →`plan` | Analysis only, no execution
|
|
66
|
-
| →`default` | Require approval for edits
|
|
67
|
-
| →`auto-edit` | Automatically approve edits
|
|
68
|
-
| →`yolo` | Automatically approve all
|
|
69
|
-
| `/model` | Switch model used in current session
|
|
70
|
-
| `/
|
|
71
|
-
| `/
|
|
59
|
+
| Command | Description | Usage Examples |
|
|
60
|
+
| ---------------- | ------------------------------------------------- | --------------------------------------------- |
|
|
61
|
+
| `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc` |
|
|
62
|
+
| `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
|
|
63
|
+
| `/skills` | List and run available skills | `/skills`, `/skills <name>` |
|
|
64
|
+
| `/approval-mode` | Change approval mode for tool usage | `/approval-mode <mode (auto-edit)> --project` |
|
|
65
|
+
| →`plan` | Analysis only, no execution | Secure review |
|
|
66
|
+
| →`default` | Require approval for edits | Daily use |
|
|
67
|
+
| →`auto-edit` | Automatically approve edits | Trusted environment |
|
|
68
|
+
| →`yolo` | Automatically approve all | Quick prototyping |
|
|
69
|
+
| `/model` | Switch model used in current session | `/model` |
|
|
70
|
+
| `/model --fast` | Set or select the fast model for background tasks | `/model --fast qwen3.5-flash` |
|
|
71
|
+
| `/extensions` | List all active extensions in current session | `/extensions` |
|
|
72
|
+
| `/memory` | Manage AI's instruction context | `/memory add Important Info` |
|
|
72
73
|
|
|
73
74
|
### 1.5 Information, Settings, and Help
|
|
74
75
|
|
|
@@ -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.
|
|
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.5-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.5-flash"
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The fast model is used for background tasks like suggestion generation. 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 background tasks (suggestion generation, speculation) |
|
|
79
|
+
|
|
80
|
+
### Example
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"fastModel": "qwen3.5-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
|
|
@@ -4,6 +4,19 @@ Run custom scripts at key points in the proto lifecycle — before tool calls, a
|
|
|
4
4
|
|
|
5
5
|
This page covers how to configure hooks, the available hook types and events, and the input/output contract for each event.
|
|
6
6
|
|
|
7
|
+
Hooks are enabled by default. You can temporarily disable all hooks by setting `disableAllHooks` to `true` in your settings file (at the top level, alongside `hooks`):
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"disableAllHooks": true,
|
|
12
|
+
"hooks": {
|
|
13
|
+
"PreToolUse": [...]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
This disables all hooks without deleting their configurations.
|
|
19
|
+
|
|
7
20
|
## Configure a hook
|
|
8
21
|
|
|
9
22
|
Hooks are defined in `.proto/settings.json` (project) or `~/.proto/settings.json` (global). Each hook attaches to an event name and optionally filters by a matcher pattern.
|
|
@@ -56,6 +56,7 @@ You'll be prompted to log in on first use. That's it! [Continue with Quickstart
|
|
|
56
56
|
- **Debug and fix issues**: Describe a bug or paste an error message. Qwen Code will analyze your codebase, identify the problem, and implement a fix.
|
|
57
57
|
- **Navigate any codebase**: Ask anything about your team's codebase, and get a thoughtful answer back. Qwen Code maintains awareness of your entire project structure, can find up-to-date information from the web, and with [MCP](./features/mcp) can pull from external datasources like Google Drive, Figma, and Slack.
|
|
58
58
|
- **Automate tedious tasks**: Fix fiddly lint issues, resolve merge conflicts, and write release notes. Do all this in a single command from your developer machines, or automatically in CI.
|
|
59
|
+
- **[Followup suggestions](./features/followup-suggestions)**: Qwen Code predicts what you want to type next and shows it as ghost text. Press Tab to accept, or just keep typing to dismiss.
|
|
59
60
|
|
|
60
61
|
## Why developers love Qwen Code
|
|
61
62
|
|