mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-11-07 06:19:43 -10:00
docs(browser-use): point users at the Chrome Web Store listing (#12510)
* docs(browser-use): point users at the Chrome Web Store listing The extension is published, but every place that tells someone how to get it still said there was no store listing: the user guide, the bundled skill the model reads — so it actively told users to build from source — and the "not connected" error, which sent them to chrome://extensions, where nothing can be installed. All three now lead with the listing. Building from source stays documented as the fallback where the listing is not available in the user's region. The extension README drops the side-loading id from its `qwen serve --allow-origin` example, which a store install would have been rejected by, for the placeholder the rest of that page already uses. Refs #12240 Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01JHhPsocuEvo8UAQkrjtiAD * docs(browser-use): state the minimum Qwen Code version and one copy per profile Only 0.24.2 and later trust the store extension's id, so an older Qwen Code cannot connect to it; the guide now says so and names the version check in its troubleshooting. It also asks anyone who loaded the extension unpacked to remove or disable that copy before using the store version. Measured in one Chromium profile with both enabled: each extension launches its own Host, and browsers.list() returns two browsers for the same profile, so which one a session gets is arbitrary. Refs #12240 Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01JHhPsocuEvo8UAQkrjtiAD --------- Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
1 parent
be1dc925dc
commit
afd7236298
7 files changed
+44
-18
No files matched your search
@@ -5,14 +5,23 @@ existing tabs and signed-in sessions.
|
||||
|
||||
## Use
|
||||
|
||||
Use macOS or Linux with Chrome 125 or later. **Install and enable the Qwen
|
||||
Chrome extension in the Chrome profile you want to use.** The extension is
|
||||
required and is not installed by the Qwen Code package. There is no Chrome Web
|
||||
Store listing yet. Build it from the `packages/chrome-extension` directory of
|
||||
the Qwen Code repository by following its
|
||||
[README](https://github.com/QwenLM/qwen-code/tree/main/packages/chrome-extension#readme),
|
||||
then open `chrome://extensions`, enable Developer mode, choose **Load
|
||||
unpacked**, and pick the built `dist/extension` directory.
|
||||
Use macOS or Linux with Chrome 125 or later and Qwen Code 0.24.2 or later
|
||||
(check with `qwen --version`). **Install the
|
||||
[Qwen Code extension from the Chrome Web Store](https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph)
|
||||
in the Chrome profile you want to use.** The extension is required and is not
|
||||
installed by the Qwen Code package. Chrome keeps it up to date once installed.
|
||||
|
||||
**Use one copy of the extension per profile.** If you previously loaded it
|
||||
unpacked, remove or disable that copy in `chrome://extensions` before using the
|
||||
store version. With both enabled, Qwen sees two browsers for the same profile
|
||||
and may connect to either.
|
||||
|
||||
If the Chrome Web Store says the extension is not available in your region,
|
||||
build it from source instead: follow the
|
||||
[README](https://github.com/QwenLM/qwen-code/tree/main/packages/chrome-extension#readme)
|
||||
of the `packages/chrome-extension` directory in the Qwen Code repository, then
|
||||
open `chrome://extensions`, enable Developer mode, choose **Load unpacked**, and
|
||||
pick the built `dist/extension` directory.
|
||||
|
||||
Describe your browser task directly, for example:
|
||||
|
||||
@@ -21,10 +30,11 @@ Describe your browser task directly, for example:
|
||||
Qwen selects the Browser Use skill when appropriate. The first browser task
|
||||
automatically registers a small local connection program in your user directory;
|
||||
later tasks reuse it. Qwen confirms the connection with the extension before
|
||||
operating pages. If it cannot connect, open Chrome and check that the extension
|
||||
is enabled in the intended profile, then retry. If a runtime dependency
|
||||
needs configuration on first use, Qwen will guide you and may ask you to restart.
|
||||
No separate Browser Use Qwen extension or `qwen serve` process is needed.
|
||||
operating pages. If it cannot connect, open Chrome and check that Qwen Code is
|
||||
0.24.2 or later and that the extension is enabled in the intended profile, then
|
||||
retry. If a runtime dependency needs configuration on first use, Qwen will guide
|
||||
you and may ask you to restart. No separate Browser Use Qwen extension or
|
||||
`qwen serve` process is needed.
|
||||
|
||||
## Disable
|
||||
|
||||
|
||||
@@ -25,6 +25,11 @@ export const CHROME_NATIVE_HOST_REVISION = 2;
|
||||
// rather than replaced, so without the bump it would keep rejecting the id.
|
||||
export const CHROME_EXTENSION_ID = 'idkijaaipeeinemigojbjkmfmabokbdk';
|
||||
export const CHROME_WEB_STORE_EXTENSION_ID = 'hdhmmjclhibojdddmancfgbkleahfaph';
|
||||
// Where users install the extension. The store resolves any slug to the
|
||||
// listing's current one by id, so this link survives a rename.
|
||||
export const CHROME_WEB_STORE_URL =
|
||||
'https://chromewebstore.google.com/detail/qwen-code/' +
|
||||
CHROME_WEB_STORE_EXTENSION_ID;
|
||||
export const CHROME_EXTENSION_IDS: readonly string[] = [
|
||||
CHROME_EXTENSION_ID,
|
||||
CHROME_WEB_STORE_EXTENSION_ID,
|
||||
|
||||
@@ -421,7 +421,7 @@ it.skipIf(process.platform === 'win32')(
|
||||
await expect(transport.start()).rejects.toMatchObject({
|
||||
code: 'BROWSER_DISCONNECTED',
|
||||
message: expect.stringContaining(
|
||||
'Open Chrome and install or enable the Qwen extension in the profile you want to use (chrome://extensions), then retry.',
|
||||
'install the extension from https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph or enable it at chrome://extensions',
|
||||
),
|
||||
});
|
||||
expect(transport.isConnected()).toBe(false);
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
CDP_REQUEST_TIMEOUT_MS,
|
||||
CHROME_BRIDGE_PROTOCOL_VERSION,
|
||||
CHROME_EXTENSION_IDS,
|
||||
CHROME_WEB_STORE_URL,
|
||||
defaultChromeBridgeSocketPath,
|
||||
type BridgeEvent,
|
||||
type BridgeHello,
|
||||
@@ -329,7 +330,7 @@ export class ChromeExtensionTransport implements ChromeBridge {
|
||||
} while (Date.now() < deadline);
|
||||
if (mismatch !== undefined) throw mismatch;
|
||||
throw disconnectedError(
|
||||
`Qwen Chrome extension is not connected. Open Chrome and install or enable the Qwen extension in the profile you want to use (chrome://extensions), then retry. ${errorMessage(lastError)}`,
|
||||
`Qwen Chrome extension is not connected. Open Chrome and, in the profile you want to use, install the extension from ${CHROME_WEB_STORE_URL} or enable it at chrome://extensions, then retry. ${errorMessage(lastError)}`,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,11 @@ It provides:
|
||||
|
||||
## Build
|
||||
|
||||
To use the extension, install it from the
|
||||
[Chrome Web Store](https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph).
|
||||
The steps below build it from source, for development or where the listing is
|
||||
not available.
|
||||
|
||||
```bash
|
||||
npm run build # -> dist/extension (static assets + bundled service worker)
|
||||
```
|
||||
@@ -98,7 +103,7 @@ The pinned adapter requires Node.js 22.12 or newer.
|
||||
```bash
|
||||
npm install -g [email protected]
|
||||
QWEN_CDP_MCP_COMMAND=chrome-devtools-mcp \
|
||||
qwen serve --allow-origin chrome-extension://idkijaaipeeinemigojbjkmfmabokbdk
|
||||
qwen serve --allow-origin chrome-extension://<this-extension-id>
|
||||
```
|
||||
|
||||
The separately installed adapter is not included in the Qwen Code npm package
|
||||
|
||||
@@ -19,8 +19,11 @@ The SDK checks the actual connection and protocol instead of reading Chrome's
|
||||
extension preferences.
|
||||
|
||||
If the extension does not connect, ask the user to open Chrome and check the
|
||||
extension in the intended profile. There is no store listing yet: build the
|
||||
extension from `packages/chrome-extension` in the Qwen Code repository (its
|
||||
extension in the intended profile. It installs from the Chrome Web Store:
|
||||
https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph
|
||||
|
||||
If the store reports it is not available in the user's region, they can build
|
||||
it from `packages/chrome-extension` in the Qwen Code repository (its
|
||||
README) and load `dist/extension` through `chrome://extensions` (Developer mode
|
||||
→ Load unpacked). After installation or enabling it, retry the connection.
|
||||
|
||||
|
||||
@@ -60,7 +60,9 @@ describe('bundled browser-use skill', () => {
|
||||
});
|
||||
|
||||
it('names where the Qwen Chrome extension comes from', () => {
|
||||
expect(skill).toContain('no store listing yet');
|
||||
expect(skill).toContain(
|
||||
'https://chromewebstore.google.com/detail/qwen-code/hdhmmjclhibojdddmancfgbkleahfaph',
|
||||
);
|
||||
expect(skill).toContain('`packages/chrome-extension`');
|
||||
expect(skill).toContain('`dist/extension`');
|
||||
expect(skill).toContain('Load unpacked');
|
||||
|
||||
Reference in new issue
Block a user