chore: update BrowserSkill extension version to 0.3.1 and enhance localization support

- Updated the BROWSERSKILL_EXTENSION_PATH in .env.example and Dockerfile.app to reference the new extension version 0.3.1.
- Modified localization files for English, Japanese, Korean, Russian, and Chinese to reflect the support for both Chrome and Edge browsers.
- Added checks for extension version compatibility in the BrowserConnectionSettings component to improve user experience.

This commit ensures that the application is aligned with the latest BrowserSkill extension and enhances the localization for better user guidance.
This commit is contained in:
wizardchen
2026-09-23 17:12:19 +08:00
committed by lyingbug
parent e6e41ed301
commit 1fa915d712
14 changed files with 130 additions and 69 deletions
+1 -1
View File
@@ -801,7 +801,7 @@ CONCURRENCY_POOL_SIZE=5
# 单应用实例共用一个 daemon;最多保留的用户配对记录数(默认 32,非实测承载量)。
# BROWSERSKILL_MAX_CONNECTIONS=32
# 供个人设置下载的配套扩展 ZIP(服务器本地绝对路径,Docker 已预设)。
# BROWSERSKILL_EXTENSION_PATH=/opt/weknora/browserskill/browser-skill-weknora-0.3.0.zip
# BROWSERSKILL_EXTENSION_PATH=/opt/weknora/browserskill/browser-skill-weknora-0.3.1.zip
# 多副本:每个节点填写可被其他节点直接访问的地址,不要使用负载均衡地址。
# BROWSERSKILL_INTERNAL_URL=http://10.0.0.12:8080
# 所有副本使用相同的随机密钥(至少 32 字符),从 Secret 注入,不提交到仓库。
+1 -1
View File
@@ -93,7 +93,7 @@ ARG APK_MIRROR_ARG
# Pairing derives the gateway URL from the user's page origin by default.
ENV BROWSERSKILL_BINARY=/opt/weknora/browserskill/bsk \
BROWSERSKILL_EXTENSION_PATH=/opt/weknora/browserskill/browser-skill-weknora-0.3.0.zip
BROWSERSKILL_EXTENSION_PATH=/opt/weknora/browserskill/browser-skill-weknora-0.3.1.zip
COPY --from=browserskill /opt/weknora/browserskill /opt/weknora/browserskill
# Create a non-root user first
+10 -7
View File
@@ -68,7 +68,7 @@ export default {
"helpHint": "Open the browser from the preview, complete the requested step, then confirm completion in the browser help overlay.",
"settingsTitle": "Browser connection",
"settingsDescription": "Pair BrowserSkill with your local Chrome to operate real web pages from conversations.",
"settingsDescription": "Pair BrowserSkill with your local Chrome or Edge to operate real web pages from conversations.",
"openSettings": "Open browser settings",
"settingsHint": "Connect BrowserSkill in Toolbox to use your local browser here.",
"unavailable": "Local browsing is not enabled on this server. Contact your administrator.",
@@ -89,26 +89,29 @@ export default {
"pairHint": "Open Connection settings → Remote connection in the extension, paste the pairing link, and confirm the server. The link is valid for 5 minutes and can be used once.",
"copyPairing": "Copy pairing link",
"copied": "Copied",
"windowHint": "Tasks run in a separate Chrome Agent Window. Borrowing existing tabs requires your permission.",
"windowHint": "Tasks run in a separate browser Agent Window. Borrowing existing tabs requires your permission.",
"preview": "Local browser task preview",
"waiting": "Waiting for a task page",
"startHint": "A browser request creates a separate Agent Window.",
"revoke": "Revoke device access",
"revokeConfirm": "You will need to pair again before using the local browser.",
"failed": "Operation failed. Please retry.",
"productDescription": "An open-source Chrome extension that lets agents open pages, read content, and take actions in your browser.",
"productDescription": "An open-source Chrome and Edge extension that lets agents open pages, read content, and take actions in your browser.",
"offline": "Offline",
"notPaired": "Not paired",
"lastSeen": "Last connected",
"readyHint": "Ready. Return to the conversation and describe your browser task.",
"capabilitiesTitle": "Your agent can",
"sidebarStatus": "Show connection status in the sidebar",
"reconnectHint": "Authorization is saved. Keep Chrome and BrowserSkill open to reconnect automatically.",
"reconnectHint": "Authorization is saved. Keep your browser and BrowserSkill open to reconnect automatically.",
"replaceDevice": "Change browser",
"installExtension": "Install BrowserSkill",
"storeInstall": "Open Chrome Web Store",
"storeInstall": "Chrome Web Store",
"edgeStoreInstall": "Edge Add-ons",
"extensionMinVersion": "Requires BrowserSkill v{version} or later. Works with Chrome and Edge.",
"extensionOutdated": "Extension v{current} is out of date. Update to v{version} or later.",
"manualInstall": "Install manually (alternative)",
"storeInstallHint": "Install BrowserSkill from the Chrome Web Store, then return here to pair.",
"storeInstallHint": "Install BrowserSkill from the Chrome Web Store or Edge Add-ons, then return here to pair.",
"installHint": "If the store is unavailable or its version is incompatible, download the matching package and install it manually.",
"downloadExtension": "Download matching package",
"officialExtension": "Official extension (Chrome Web Store)",
@@ -121,7 +124,7 @@ export default {
"copyAgain": "Copy again",
"usageTitle": "How to use",
"usageStep1Title": "Install the extension",
"usageStep1Text": "Unzip the downloaded ZIP, enter chrome://extensions in the Chrome address bar, enable Developer mode, choose Load unpacked, and select the extracted extension folder.",
"usageStep1Text": "Unzip the downloaded ZIP, enter chrome://extensions (edge://extensions in Edge) in the address bar, enable Developer mode, choose Load unpacked, and select the extracted extension folder.",
"usageStep2Title": "Pair this browser",
"usageStep2Text": "Copy the pairing link into Connection settings → Remote connection in the extension and confirm the server. Pair once for all conversations in this space.",
"usageStep3Title": "Describe the task in chat",
+10 -7
View File
@@ -83,7 +83,7 @@ export default {
"helpHint": "確認または許可が必要です。プレビューをクリックして移動してください。",
"settingsTitle": "ブラウザー接続",
"settingsDescription": "BrowserSkill で手元の Chrome を接続すると、会話から実際のウェブページを操作できます。",
"settingsDescription": "BrowserSkill で手元の Chrome または Edge を接続すると、会話から実際のウェブページを操作できます。",
"openSettings": "接続設定を開く",
"settingsHint": "ツールボックスで BrowserSkill を接続すると、ここでローカルブラウザーを利用できます。",
"unavailable": "サーバーでローカルブラウザーが有効になっていません。管理者に連絡してください。",
@@ -104,26 +104,29 @@ export default {
"pairHint": "拡張機能の「接続設定 → リモート接続」にリンクを貼り付け、サーバーを確認します。リンクは 5 分間有効で、1 回限り使用できます。",
"copyPairing": "ペアリングリンクをコピー",
"copied": "コピーしました",
"windowHint": "タスクは独立した Chrome タスクウィンドウで実行されます。既存のタブを借りるには許可が必要です。",
"windowHint": "タスクは独立したブラウザーのタスクウィンドウで実行されます。既存のタブを借りるには許可が必要です。",
"preview": "ローカルブラウザーのプレビュー",
"waiting": "タスクのページを待っています",
"startHint": "ブラウザーへのリクエストで独立したタスクウィンドウが作成されます。",
"revoke": "デバイスの認証を取り消す",
"revokeConfirm": "取り消すと、ローカルブラウザーを使うには再度ペアリングが必要です。",
"failed": "操作に失敗しました。再試行してください。",
"productDescription": "エージェントがブラウザーでページを開き、内容を読み取り、操作できるオープンソースの Chrome 拡張機能です。",
"productDescription": "エージェントがブラウザーでページを開き、内容を読み取り、操作できるオープンソースの Chrome / Edge 拡張機能です。",
"offline": "オフライン",
"notPaired": "未ペアリング",
"lastSeen": "最終接続",
"readyHint": "準備完了。会話に戻り、ブラウザーで行うタスクを伝えてください。",
"capabilitiesTitle": "エージェントができること",
"sidebarStatus": "サイドバーに接続状態を表示",
"reconnectHint": "認証は保存されています。Chrome と拡張機能を開くと自動的に再接続します。",
"reconnectHint": "認証は保存されています。ブラウザーと拡張機能を開くと自動的に再接続します。",
"replaceDevice": "ブラウザーを変更",
"installExtension": "BrowserSkill をインストール",
"storeInstall": "Chrome ウェブストアへ",
"storeInstall": "Chrome ウェブストア",
"edgeStoreInstall": "Edge アドオン",
"extensionMinVersion": "BrowserSkill v{version} 以降が必要です。Chrome と Edge に対応しています。",
"extensionOutdated": "拡張機能 v{current} は古いバージョンです。v{version} 以降に更新してください。",
"manualInstall": "手動インストール(代替手段)",
"storeInstallHint": "Chrome ウェブストアから BrowserSkill をインストールし、ここに戻ってペアリングしてください。",
"storeInstallHint": "Chrome ウェブストアまたは Edge アドオンから BrowserSkill をインストールし、ここに戻ってペアリングしてください。",
"installHint": "ストアにアクセスできない場合やバージョンに互換性がない場合は、対応パッケージをダウンロードして手動でインストールできます。",
"downloadExtension": "対応パッケージをダウンロード",
"officialExtension": "公式拡張機能(Chrome ウェブストア)",
@@ -136,7 +139,7 @@ export default {
"copyAgain": "再コピー",
"usageTitle": "使い方",
"usageStep1Title": "拡張機能をインストール",
"usageStep1Text": "ZIP を解凍し、Chrome のアドレスバーに chrome://extensions と入力します。「デベロッパーモード」を有効にし、「パッケージ化されていない拡張機能を読み込む」から解凍した拡張機能フォルダーを選択します。",
"usageStep1Text": "ZIP を解凍し、ブラウザーのアドレスバーに chrome://extensions(Edge では edge://extensions)と入力します。「デベロッパーモード」を有効にし、「パッケージ化されていない拡張機能を読み込む」から解凍した拡張機能フォルダーを選択します。",
"usageStep2Title": "ブラウザーをペアリング",
"usageStep2Text": "ペアリングリンクを拡張機能の「接続設定 → リモート接続」に貼り付け、サーバーを確認します。同じスペースのすべての会話で共有されます。",
"usageStep3Title": "会話でタスクを伝える",
+10 -7
View File
@@ -68,7 +68,7 @@ export default {
"helpHint": "인증 또는 권한 승인이 필요합니다. 미리보기를 클릭하여 이동하세요.",
"settingsTitle": "브라우저 연결",
"settingsDescription": "BrowserSkill로 내 Chrome을 연결하면 대화에서 실제 웹페이지를 조작할 수 있습니다.",
"settingsDescription": "BrowserSkill로 내 Chrome 또는 Edge를 연결하면 대화에서 실제 웹페이지를 조작할 수 있습니다.",
"openSettings": "연결 설정 열기",
"settingsHint": "도구함에서 BrowserSkill을 연결하면 로컬 브라우저를 사용할 수 있습니다.",
"unavailable": "서버에서 로컬 브라우저가 활성화되지 않았습니다. 관리자에게 문의하세요.",
@@ -89,26 +89,29 @@ export default {
"pairHint": "확장 프로그램의 연결 설정 → 원격 연결에 페어링 링크를 붙여넣고 서버를 확인하세요. 링크는 5분 동안 한 번만 사용할 수 있습니다.",
"copyPairing": "페어링 링크 복사",
"copied": "복사됨",
"windowHint": "작업은 별도의 Chrome 작업 창에서 실행됩니다. 기존 탭을 빌리려면 권한이 필요합니다.",
"windowHint": "작업은 별도의 브라우저 작업 창에서 실행됩니다. 기존 탭을 빌리려면 권한이 필요합니다.",
"preview": "로컬 브라우저 미리보기",
"waiting": "작업 페이지를 기다리는 중",
"startHint": "브라우저 요청을 보내면 별도의 작업 창이 생성됩니다.",
"revoke": "기기 인증 취소",
"revokeConfirm": "취소하면 다시 연결해야 로컬 브라우저를 사용할 수 있습니다.",
"failed": "작업에 실패했습니다. 다시 시도하세요.",
"productDescription": "에이전트가 브라우저에서 페이지를 열고 내용을 읽고 작업을 수행할 수 있게 해 주는 오픈소스 Chrome 확장 프로그램입니다.",
"productDescription": "에이전트가 브라우저에서 페이지를 열고 내용을 읽고 작업을 수행할 수 있게 해 주는 오픈소스 Chrome / Edge 확장 프로그램입니다.",
"offline": "오프라인",
"notPaired": "연결 설정 필요",
"lastSeen": "최근 연결",
"readyHint": "준비되었습니다. 대화로 돌아가 브라우저 작업을 요청하세요.",
"capabilitiesTitle": "에이전트가 할 수 있는 작업",
"sidebarStatus": "사이드바에 연결 상태 표시",
"reconnectHint": "인증이 저장되어 있습니다. Chrome과 확장 프로그램을 열면 자동으로 다시 연결됩니다.",
"reconnectHint": "인증이 저장되어 있습니다. 브라우저와 확장 프로그램을 열면 자동으로 다시 연결됩니다.",
"replaceDevice": "브라우저 변경",
"installExtension": "BrowserSkill 설치",
"storeInstall": "Chrome 웹 스토어 열기",
"storeInstall": "Chrome 웹 스토어",
"edgeStoreInstall": "Edge 추가 기능",
"extensionMinVersion": "BrowserSkill v{version} 이상이 필요합니다. Chrome과 Edge를 지원합니다.",
"extensionOutdated": "확장 프로그램 v{current}이(가) 오래되었습니다. v{version} 이상으로 업데이트하세요.",
"manualInstall": "수동 설치 (대안)",
"storeInstallHint": "Chrome 웹 스토어에서 BrowserSkill을 설치한 후 여기로 돌아와 페어링하세요.",
"storeInstallHint": "Chrome 웹 스토어 또는 Edge 추가 기능에서 BrowserSkill을 설치한 후 여기로 돌아와 페어링하세요.",
"installHint": "스토어에 접근할 수 없거나 버전이 호환되지 않으면 호환 패키지를 다운로드하여 수동으로 설치할 수 있습니다.",
"downloadExtension": "호환 패키지 다운로드",
"officialExtension": "공식 확장 프로그램 (Chrome 웹 스토어)",
@@ -121,7 +124,7 @@ export default {
"copyAgain": "다시 복사",
"usageTitle": "사용 방법",
"usageStep1Title": "확장 프로그램 설치",
"usageStep1Text": "ZIP 파일의 압축을 풀고 Chrome 주소창에 chrome://extensions를 입력하세요. 개발자 모드를 켜고 압축해제된 확장 프로그램을 로드합니다를 선택한 뒤 압축을 푼 확장 프로그램 폴더를 선택하세요.",
"usageStep1Text": "ZIP 파일의 압축을 풀고 브라우저 주소창에 chrome://extensions(Edge는 edge://extensions)를 입력하세요. 개발자 모드를 켜고 압축해제된 확장 프로그램을 로드합니다를 선택한 뒤 압축을 푼 확장 프로그램 폴더를 선택하세요.",
"usageStep2Title": "브라우저 연결",
"usageStep2Text": "페어링 링크를 확장 프로그램의 연결 설정 → 원격 연결에 붙여넣고 서버를 확인하세요. 한 번 연결하면 공간 내 모든 대화에서 공유됩니다.",
"usageStep3Title": "대화에서 작업 요청",
+10 -7
View File
@@ -68,7 +68,7 @@ export default {
"helpHint": "Требуется проверка или разрешение. Нажмите предпросмотр для перехода.",
"settingsTitle": "Подключение браузера",
"settingsDescription": "Подключите локальный Chrome через BrowserSkill, чтобы управлять реальными страницами из диалогов.",
"settingsDescription": "Подключите локальный Chrome или Edge через BrowserSkill, чтобы управлять реальными страницами из диалогов.",
"openSettings": "Открыть настройки",
"settingsHint": "Подключите BrowserSkill в разделе «Инструменты», чтобы использовать локальный браузер.",
"unavailable": "Локальный браузер не включён на сервере. Обратитесь к администратору.",
@@ -89,26 +89,29 @@ export default {
"pairHint": "Откройте в расширении «Настройки подключения → Удалённое подключение», вставьте ссылку и подтвердите сервер. Ссылка действует 5 минут и используется один раз.",
"copyPairing": "Скопировать ссылку",
"copied": "Скопировано",
"windowHint": "Задачи выполняются в отдельном окне Chrome. Заимствование существующих вкладок требует вашего разрешения.",
"windowHint": "Задачи выполняются в отдельном окне браузера. Заимствование существующих вкладок требует вашего разрешения.",
"preview": "Предпросмотр локального браузера",
"waiting": "Ожидание страницы задачи",
"startHint": "Запрос к браузеру создаёт отдельное окно агента.",
"revoke": "Отозвать доступ устройства",
"revokeConfirm": "После отзыва потребуется повторное подключение, чтобы снова использовать локальный браузер.",
"failed": "Операция не удалась. Повторите попытку.",
"productDescription": "Расширение Chrome с открытым исходным кодом: агент открывает страницы, читает их и выполняет действия в вашем браузере.",
"productDescription": "Расширение Chrome и Edge с открытым исходным кодом: агент открывает страницы, читает их и выполняет действия в вашем браузере.",
"offline": "Не в сети",
"notPaired": "Не подключён",
"lastSeen": "Последнее подключение",
"readyHint": "Готово. Вернитесь в диалог и опишите задачу для браузера.",
"capabilitiesTitle": "Агент может",
"sidebarStatus": "Показывать статус подключения на боковой панели",
"reconnectHint": "Авторизация сохранена. Откройте Chrome и BrowserSkill для автоматического подключения.",
"reconnectHint": "Авторизация сохранена. Откройте браузер и BrowserSkill для автоматического подключения.",
"replaceDevice": "Сменить браузер",
"installExtension": "Установите BrowserSkill",
"storeInstall": "Открыть магазин Chrome",
"storeInstall": "Интернет-магазин Chrome",
"edgeStoreInstall": "Надстройки Edge",
"extensionMinVersion": "Требуется BrowserSkill v{version} или новее. Поддерживаются Chrome и Edge.",
"extensionOutdated": "Версия расширения v{current} устарела. Обновите до v{version} или новее.",
"manualInstall": "Установить вручную (альтернатива)",
"storeInstallHint": "Установите BrowserSkill из Интернет-магазина Chrome, затем вернитесь сюда для сопряжения.",
"storeInstallHint": "Установите BrowserSkill из Интернет-магазина Chrome или надстроек Edge, затем вернитесь сюда для сопряжения.",
"installHint": "Если магазин недоступен или версия несовместима, скачайте подходящий пакет и установите его вручную.",
"downloadExtension": "Скачать совместимый пакет",
"officialExtension": "Официальное расширение (Интернет-магазин Chrome)",
@@ -121,7 +124,7 @@ export default {
"copyAgain": "Копировать ещё раз",
"usageTitle": "Как пользоваться",
"usageStep1Title": "Установите расширение",
"usageStep1Text": "Распакуйте ZIP, введите chrome://extensions в адресной строке Chrome, включите режим разработчика, нажмите «Загрузить распакованное расширение» и выберите папку расширения.",
"usageStep1Text": "Распакуйте ZIP, введите chrome://extensions (в Edge — edge://extensions) в адресной строке, включите режим разработчика, нажмите «Загрузить распакованное расширение» и выберите папку расширения.",
"usageStep2Title": "Подключите браузер",
"usageStep2Text": "Вставьте ссылку в «Настройки подключения → Удалённое подключение» расширения и подтвердите сервер. Одно подключение используется во всех диалогах пространства.",
"usageStep3Title": "Опишите задачу в диалоге",
+10 -7
View File
@@ -68,7 +68,7 @@ export default {
"helpHint": "点击预览前往浏览器,完成上述步骤后,在浏览器帮助提示中确认完成。",
"settingsTitle": "浏览器连接",
"settingsDescription": "通过 BrowserSkill 连接本机 Chrome,配对后即可在对话中操作真实网页。",
"settingsDescription": "通过 BrowserSkill 连接本机 Chrome 或 Edge,配对后即可在对话中操作真实网页。",
"openSettings": "前往浏览器连接",
"settingsHint": "在工具箱中连接 BrowserSkill,即可在对话里使用本机浏览器。",
"unavailable": "服务端尚未启用本机浏览器,请联系管理员。",
@@ -89,26 +89,29 @@ export default {
"pairHint": "打开扩展的「连接设置 → 远程连接」,粘贴配对链接并确认服务器。链接 5 分钟内有效,仅可使用一次。",
"copyPairing": "复制配对链接",
"copied": "已复制",
"windowHint": "任务在独立的 Chrome 任务窗口中运行。借用已有标签页需要你的授权。",
"windowHint": "任务在独立的浏览器任务窗口中运行。借用已有标签页需要你的授权。",
"preview": "本机浏览器任务预览",
"waiting": "等待任务页面",
"startHint": "发起浏览器请求后,会创建独立的任务窗口。",
"revoke": "撤销设备授权",
"revokeConfirm": "撤销后需要重新配对,才能继续使用本机浏览器。",
"failed": "操作失败,请重试",
"productDescription": "开源的 Chrome 扩展,让智能体在你的浏览器里打开网页、读取内容并完成操作。",
"productDescription": "开源的 Chrome / Edge 扩展,让智能体在你的浏览器里打开网页、读取内容并完成操作。",
"offline": "离线",
"notPaired": "未配对",
"lastSeen": "最近连接",
"readyHint": "已准备就绪。回到对话,直接描述需要浏览器完成的任务。",
"capabilitiesTitle": "智能体可以",
"sidebarStatus": "在侧边栏显示连接状态",
"reconnectHint": "保留授权,等待扩展自动重连。请确认 Chrome 和 BrowserSkill 扩展已开启。",
"reconnectHint": "保留授权,等待扩展自动重连。请确认浏览器和 BrowserSkill 扩展已开启。",
"replaceDevice": "更换浏览器",
"installExtension": "安装 BrowserSkill 扩展",
"storeInstall": "前往 Chrome 商店",
"storeInstall": "Chrome 应用商店",
"edgeStoreInstall": "Edge 加载项",
"extensionMinVersion": "需要 BrowserSkill v{version} 及以上版本,支持 Chrome 和 Edge。",
"extensionOutdated": "当前扩展版本 v{current} 过低,请升级到 v{version} 及以上。",
"manualInstall": "手动安装(备用)",
"storeInstallHint": "在 Chrome 应用商店安装 BrowserSkill,再回到这里配对。",
"storeInstallHint": "在 Chrome 应用商店或 Edge 加载项中安装 BrowserSkill,再回到这里配对。",
"installHint": "无法访问商店或商店版本不兼容时,可下载配套扩展并手动安装。",
"downloadExtension": "下载配套扩展",
"officialExtension": "官方扩展(Chrome 应用商店)",
@@ -121,7 +124,7 @@ export default {
"copyAgain": "再次复制",
"usageTitle": "使用方式",
"usageStep1Title": "安装扩展",
"usageStep1Text": "下载 ZIP 后解压,在 Chrome 地址栏输入 chrome://extensions,开启「开发者模式」,点击「加载已解压的扩展程序」,选择解压后的扩展目录。",
"usageStep1Text": "下载 ZIP 后解压,在浏览器地址栏输入 chrome://extensions(Edge 为 edge://extensions),开启「开发者模式」,点击「加载已解压的扩展程序」,选择解压后的扩展目录。",
"usageStep2Title": "配对这台浏览器",
"usageStep2Text": "复制配对链接,在扩展的「连接设置 → 远程连接」中粘贴并确认服务器。配对一次,同一空间的各个对话共用。",
"usageStep3Title": "回到对话描述任务",
@@ -37,6 +37,10 @@
<p v-if="!status.connected" class="capabilities-hint">
<t-icon name="time" size="14px" />{{ t('localBrowser.reconnectHint') }}
</p>
<p v-else-if="extensionOutdated" class="capabilities-hint" role="status">
<t-icon name="error-circle" size="14px" />
{{ t('localBrowser.extensionOutdated', { current: status.extension_version, version: MIN_EXTENSION_VERSION }) }}
</p>
<span class="capabilities-title">{{ t('localBrowser.capabilitiesTitle') }}</span>
<ul class="capabilities-grid">
<li v-for="item in capabilities" :key="item.label">
@@ -74,6 +78,7 @@
<span class="step-index">1</span>
<div class="step-copy">
<strong>{{ t('localBrowser.usageStep1Title') }}</strong>
<p>{{ t('localBrowser.extensionMinVersion', { version: MIN_EXTENSION_VERSION }) }}</p>
<details class="install-guide">
<summary>{{ t('localBrowser.manualInstall') }}<t-icon name="chevron-down" size="12px" /></summary>
<div class="setup-help">
@@ -88,10 +93,12 @@
</div>
</details>
</div>
<a class="setup-action setup-main-action store-action" href="https://chromewebstore.google.com/detail/hhcmgoofomhgciiibhipgmgkgnoenaoi"
target="_blank" rel="noopener noreferrer">
{{ t('localBrowser.storeInstall') }}<t-icon name="jump" size="13px" />
</a>
<div class="store-actions">
<a v-for="store in EXTENSION_STORES" :key="store.label" class="setup-action setup-main-action store-action"
:href="store.url" target="_blank" rel="noopener noreferrer">
{{ t(store.label) }}<t-icon name="jump" size="13px" />
</a>
</div>
</li>
<li>
<span class="step-index">2</span>
@@ -158,7 +165,7 @@
</div>
</template>
<script setup lang="ts">
import { onMounted, onBeforeUnmount, ref } from 'vue'
import { computed, onMounted, onBeforeUnmount, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import { get, post, getDown } from '@/utils/request'
import { useBrowserConnectionStore } from '@/stores/browserConnection'
@@ -176,6 +183,19 @@ const endpoint = '/api/v1/me/browser'
const controller = new AbortController()
let revision = 0
let alive = true, timer: ReturnType<typeof setTimeout> | undefined, expiry: ReturnType<typeof setTimeout> | undefined, pairExpires = 0
const MIN_EXTENSION_VERSION = '0.3.1'
const EXTENSION_STORES = [
{ label: 'localBrowser.storeInstall', url: 'https://chromewebstore.google.com/detail/hhcmgoofomhgciiibhipgmgkgnoenaoi' },
{ label: 'localBrowser.edgeStoreInstall', url: 'https://microsoftedge.microsoft.com/addons/detail/browserskill/emacgiaaaiojkkpkddmmdfhmokgmnikg' },
]
const versionParts = (value: string) => value.replace(/^v/, '').split(/[.-]/).slice(0, 3).map((part) => Number.parseInt(part, 10) || 0)
const extensionOutdated = computed(() => {
const current = status.value.connected ? status.value.extension_version : ''
if (!current) return false
const [a, b] = [versionParts(current), versionParts(MIN_EXTENSION_VERSION)]
for (let i = 0; i < 3; i++) if (a[i] !== b[i]) return a[i]! < b[i]!
return false
})
const capabilities = [
{ icon: 'link', label: 'localBrowser.openPage' },
{ icon: 'file-search', label: 'localBrowser.readPage' },
@@ -536,6 +556,13 @@ onBeforeUnmount(() => { alive = false; controller.abort(); clearTimeout(timer);
gap: 12px;
}
.store-actions {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 6px;
}
.connection-card .setup-action {
display: inline-flex;
align-items: center;
@@ -766,11 +793,16 @@ onBeforeUnmount(() => { alive = false; controller.abort(); clearTimeout(timer);
grid-template-columns: 22px minmax(0, 1fr);
}
.setup-steps li > .setup-action {
.setup-steps li > .setup-action,
.setup-steps li > .store-actions {
grid-column: 2;
justify-self: start;
}
.store-actions {
flex-direction: row;
}
.status-pill {
margin-left: 0;
}
+1 -1
View File
@@ -19,7 +19,7 @@ func browserDescription(instructions []string) string {
}
// The local_browser operating contract is maintained here, not in editable agent
// templates or the upstream CLI skill. Uses the paired CLI/extension 0.3.0
// templates or the upstream CLI skill. Uses the paired CLI/extension 0.3.1
// source baseline, remote ownership contract and WeKnora task controls.
const browserToolDescription = `Control the user's connected Chrome through local_browser; no shell, installation or CLI
session commands are needed. Sessions are server-managed. Pass fields beside method, and only
+4 -4
View File
@@ -1,11 +1,11 @@
{
"version": "0.3.0",
"version": "0.3.1",
"extension": {
"version": "0.3.0",
"source_commit": "3da449e9ff2a1f25adc7170fb41d5ed7a82d84d5"
"version": "0.3.1",
"source_commit": "da6bf4eed2dd7256567e152df8c903c87f6598c3"
},
"daemon": {
"source_commit": "3da449e9ff2a1f25adc7170fb41d5ed7a82d84d5",
"source_commit": "da6bf4eed2dd7256567e152df8c903c87f6598c3",
"build": "cargo build --locked --release -p bsk"
}
}
+14 -13
View File
@@ -1,12 +1,13 @@
# BrowserSkill upstream integration
The extension and daemon are based on official `main` commit
`3da449e9ff2a1f25adc7170fb41d5ed7a82d84d5` (after `ext-v0.3.0`, including the
merged upstream PRs #291, #296, #297 and #318). Both still report version `0.3.0`;
the exact source baseline is recorded in `scripts/browserskill-release.json`.
The daemon is built with `cargo build --locked --release -p bsk` from the same
commit. The published CLI 0.3.0 binary and the published 0.3.0 extension ZIP
predate this baseline and are not equivalent replacements. Native builds
The extension and daemon are based on the official `ext-v0.3.1` tag, commit
`da6bf4eed2dd7256567e152df8c903c87f6598c3` (including the upstream PRs #291,
#296, #297 and #318 that WeKnora previously pinned from `main`). Both report
version `0.3.1`; the exact source baseline is recorded in
`scripts/browserskill-release.json`. The daemon is built with
`cargo build --locked --release -p bsk` from the same commit because upstream
has not published a matching CLI 0.3.1 binary. The store builds of extension
0.3.1 match this baseline. Native builds
require Rust/Cargo and a C compiler (plus CMake on Linux). Docker builds on the
target architecture.
@@ -46,7 +47,7 @@ stops preview polling in WeKnora. Completed tasks use native session stop.
The preview and focus side channel is now the official optional UI channel
documented in the upstream
[remote connection contract](https://github.com/Tencent/BrowserSkill/blob/3da449e9ff2a1f25adc7170fb41d5ed7a82d84d5/docs/remote-extension-connection.md#optional-ui-channel).
[remote connection contract](https://github.com/Tencent/BrowserSkill/blob/da6bf4eed2dd7256567e152df8c903c87f6598c3/docs/remote-extension-connection.md#optional-ui-channel).
Only authenticated remote sockets handle these request frames; they bypass the
native automation queue and never start a session:
@@ -64,10 +65,10 @@ native automation queue and never start a session:
Errors use the native envelope with typed codes (`not_found`, `timeout`,
`cancelled`, `cdp_failed`) and an optional `data.reason`. WeKnora maps every
error except `unknown_method` to a transient preview failure. Extensions built
before PR #296, including the published 0.3.0 ZIP, answer `unknown_method`;
before PR #296 answer `unknown_method`;
WeKnora then disables preview polling and reports the extension as outdated.
## Intentional behavior changes versus the published 0.3.0 extension
## Behavior of the 0.3.1 extension
- Remote tasks use official dedicated Agent Windows. No `tabGroups` permission.
- Popup attribution follows upstream PR #297: only a main-frame navigation
@@ -91,9 +92,9 @@ WeKnora then disables preview polling and reports the extension as outdated.
- Human help follows the upstream focus/confirmation behavior.
- Remote upload/download remain unsupported, as defined upstream.
Even though the version remains 0.3.0, users must install the rebuilt ZIP.
Upgrade users by replacing the existing unpacked extension directory and
reloading it after ending active tasks. Keeping the extension ID preserves the
Users need extension 0.3.1 or later, from the Chrome Web Store, Edge Add-ons or
the bundled ZIP. Upgrade unpacked installs by replacing the existing extension
directory and reloading it after ending active tasks. Keeping the extension ID preserves the
migrated credentials; installing under a new ID requires pairing again.
## Validation
+2 -2
View File
@@ -42,8 +42,8 @@ git -C "$build_dir/source" checkout --detach "$source_commit"
cp "$build_dir/source/apps/extension/dist/browser-skillextension-${extension_version}-chrome.zip" "$output_dir/browser-skill-weknora-${extension_version}.zip"
cp "$build_dir/source/LICENSE" "$output_dir/BrowserSkill-LICENSE"
# Build the daemon from the same pinned source; the published CLI 0.3.0 binary
# predates the navigation-response grace fix (upstream PR #291).
# Build the daemon from the same pinned source; upstream has not published a
# matching CLI 0.3.1 binary.
cargo_target_dir="${CARGO_TARGET_DIR:-$build_dir/target}"
mkdir -p "$cargo_target_dir"
cargo_target_dir="$(cd "$cargo_target_dir" && pwd)"
+1 -1
View File
@@ -28,7 +28,7 @@ try {
const popup = await browser.newPage();
await popup.goto(new URL('popup.html', worker.url()).href);
await popup.locator('details summary').click();
// Official 0.3.0 unifies local/remote connection settings.
// The extension popup unifies local/remote connection settings.
await popup.locator('[role="group"] button').nth(1).click();
await popup.locator('#remote-pairing').fill(pairing);
await popup.locator('form button[type="submit"]').click();
+18 -5
View File
@@ -1,14 +1,26 @@
# 本机浏览器接入与部署
WeKnora 通过 BrowserSkill daemon 和配套 Chrome 扩展,将用户电脑上的浏览器接入智能推理对话。浏览器在用户电脑上运行,daemon 在 WeKnora app 一侧运行,无需技能沙箱。网页剪藏和侧边栏知识库问答使用另一个[知识管理助手插件](06-chrome-extension.md)。
WeKnora 通过 BrowserSkill daemon 和 [BrowserSkill](https://github.com/Tencent/BrowserSkill) 浏览器扩展,将用户电脑上的浏览器接入智能推理对话。扩展支持 Chrome 和 Microsoft Edge(基于 Chromium 125 及以上),其他 Chromium 浏览器不保证兼容。浏览器在用户电脑上运行,daemon 在 WeKnora app 一侧运行,无需技能沙箱。网页剪藏和侧边栏知识库问答使用另一个[知识管理助手插件](06-chrome-extension.md)。
## 安装扩展
扩展需要 **0.3.1 及以上**版本,任选一种方式安装:
- Chrome:[Chrome 应用商店](https://chromewebstore.google.com/detail/hhcmgoofomhgciiibhipgmgkgnoenaoi)
- Edge:[Edge 加载项](https://microsoftedge.microsoft.com/addons/detail/browserskill/emacgiaaaiojkkpkddmmdfhmokgmnikg)
- 配套 ZIP:无法访问商店时,在「浏览器连接」页的「手动安装(备用)」下载。解压后在 `chrome://extensions`(Edge 为 `edge://extensions`)开启「开发者模式」,选择「加载已解压的扩展程序」。
已连接的扩展版本低于 0.3.1 时,「浏览器连接」页会提示升级。
## 配对与使用
1. 在个人设置的「浏览器连接」下载配套 ZIP,解压后在 Chrome 扩展程序页面加载。
2. 复制设置页生成的一次性配对链接,在扩展「连接设置 → 远程连接」粘贴并保存。
1. 打开侧边栏「工具箱 → 浏览器连接」。旧的「设置 → 浏览器连接」链接会自动跳转到这里。
2. 复制页面生成的一次性配对链接,在扩展「连接设置 → 远程连接」粘贴并保存。
3. 在智能推理输入框开启「本机浏览器」,再提交任务。配对成功不代表每轮自动启用。
4. 首次调用创建独立任务窗口;对话预览可定位页面、暂停、继续或结束当前浏览器任务。
连接状态显示在「浏览器连接」标签上(已连接、离线或未配对)。已配对时,侧边栏「工具箱」右侧的浏览器小图标也会用圆点标出状态:绿色为已连接,橙色为离线。不需要时可以在「浏览器连接」页关闭「在侧边栏显示连接状态」,该设置只保存在当前浏览器。同一页还可以设置「浏览器搜索指令」,指定偏好的搜索引擎和搜索地址。
授权按空间和用户保存;同一空间内多个对话共用设备授权,但各有任务。当前每个空间+用户保留一个设备授权,激活新设备会替换旧设备。
配对链接五分钟有效。设备令牌有效期 90 天,30 天后自动轮换;生成新链接不会立即断开旧设备,成功激活后才替换授权。撤销设备、停用用户或移除空间成员会阻止后续使用。
@@ -39,7 +51,7 @@ WeKnora 通过 BrowserSkill daemon 和配套 Chrome 扩展,将用户电脑上
```dotenv
BROWSERSKILL_BINARY=/opt/weknora/browserskill/bsk
BROWSERSKILL_EXTENSION_PATH=/opt/weknora/browserskill/browser-skill-weknora-0.3.0.zip
BROWSERSKILL_EXTENSION_PATH=/opt/weknora/browserskill/browser-skill-weknora-0.3.1.zip
BROWSERSKILL_MAX_CONNECTIONS=32
```
@@ -51,7 +63,7 @@ BROWSERSKILL_PUBLIC_URL=wss://weknora.example.com/api/v1/local-browser/extension
本机可用 localhost WS,远端要求浏览器信任的 WSS 证书。内网可以使用受信任的企业 CA。显式设置 `BROWSERSKILL_BINARY=` 可关闭能力;修改 Docker 环境变量后使用 `docker compose up -d app frontend` 重建容器。
配套扩展和 daemon 必须一同升级,不能只按显示的 0.3.0 版本号判断兼容性;上游早期发布的 0.3.0 二进制和 ZIP 早于当前固定提交,不包含所需修复和 UI 接口。覆盖原解压目录并重新加载可保留扩展 ID,重新安装导致 ID 改变时需要重新配对。分发时保留 `BrowserSkill-LICENSE`。
配套扩展和 daemon 必须一同升级,扩展需要 0.3.1 及以上(Chrome 应用商店、Edge 加载项或配套 ZIP 均可)。覆盖原解压目录并重新加载可保留扩展 ID,重新安装导致 ID 改变时需要重新配对。分发时保留 `BrowserSkill-LICENSE`。
## 多副本与入口代理
@@ -79,6 +91,7 @@ Kubernetes 可使用 Pod IP 组成直连地址。不要用各副本独立的 SQL
| 现象 | 检查方向 |
| --- | --- |
| 无配套扩展下载或能力不可用 | daemon 与扩展文件路径、可执行权限、目标架构和 app 镜像版本 |
| 提示扩展版本过低 | 从 Chrome 应用商店、Edge 加载项或配套 ZIP 升级到 0.3.1 及以上,覆盖原解压目录后重新加载 |
| 授权成功但 WSS 失败 | 公网地址/端口、受信任证书、外层代理 WebSocket Upgrade |
| 设备连接正常但任务不执行 | 本轮开关、任务是否暂停、是否等待标签借用或人工帮助 |
| 没有人工帮助提示 | 执行记录是否调用 `request_help`;扩展是否禁用了人工帮助 |