diff --git a/CHANGELOG.md b/CHANGELOG.md index b7d1fc654..4b45b5eb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,66 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). Starting from 0.2.0, CLI / Extension / DSH Plugin share the same version number. -## [Unreleased] +## [0.4.0] - 2026-10-30 + +### Changed + +- **Breaking — extension compatibility:** the extension now requires daemon + protocol 1.6 or later; CLI/daemon 0.3.3 uses protocol 1.3 and cannot connect. + Update the CLI and restart the running daemon before updating the extension, + then update the DSH plugin. CLI/daemon and extension 0.4.0 use protocol 1.7. +- **Breaking — shared browser control:** new sessions and their task tabs enable + human/agent collaboration automatically. After initial navigation, synchronize + with `bsk cooperate sync` and pass its single-use `--context` to each action; + DSH uses `bsk_session action:sync` and `contextId`. Human input or changed page + evidence can revoke a pending action; synchronize and reconsider the result + instead of replaying it. Reload the updated skill in existing conversations. +- Moving any controlled tab out of its original Agent Window ends the whole + session, preserves pages in place and removes control indicators. Moving the + tab back does not restart the task. Normal session stop preserves pages with + human participation and cleans up untouched task-created pages. +- macOS CLI releases require Developer ID signing and Apple notarization for + both architectures, alongside the existing Windows EV signature checks. + `Publish CLI` verifies both platforms before publishing the complete release; + archive names and installation commands remain unchanged. +- English and Chinese privacy policies cover shared-control observations, + explicitly saved observation files, incognito tasks and `tabGroups`. Upgrade + and publishing instructions use CLI-first rollout for this compatibility change. + +### Added + +- Human/agent collaboration with visible control indicators, manual hold and + resume, bounded activity evidence, page-change guards and explicit decision + regions. Native JavaScript dialogs participate in control and recovery. +- Native drag interactions, including cross-origin frame targets, and a + click–move–click mode for selecting ranges. CLI and DSH expose the new actions. +- `bsk step` executes one chosen action, optionally waits for an element and then + synchronizes, preserving the action receipt if a later stage fails. Explicit + observation saving, baseline reuse and `bsk view` let agents read and search + historical evidence locally without another browser call. DSH exposes these + through `step`, `view`, `saveFull` and baseline options. +- Incognito Agent Windows through `session start --incognito`, with explicit + browser incognito permission and no borrowing of ordinary tabs. Incognito + windows in one profile share their incognito login state. +- Orange BrowserSkill tab groups mark controlled Agent Window tabs using the + new `tabGroups` permission; grouping is removed when the task ends. ### Fixed +- Browser interactions retain current element references for dynamic menus, + dispatch shadow-DOM input events correctly, handle plus-key chords, and reject + select controls that become disabled during focus. Extraction respects + `content-visibility`, and observation token estimates and evidence scope are + more consistent. +- Website debugging preserves failed request-body metadata and primitive console + exceptions. Video capture respects human control, and playback regressions wait + for decoded frames before checking colors. +- Windows DSH child-process cancellation preserves its termination grace period; + remote authorization handles a busy store, and WebSocket connection limits + bound incoming peers. Foreground daemon consoles remain visible. +- Browser evaluation scaffolding handles Windows cross-drive paths, relative + import URLs and long run IDs; child output preserves UTF-8. Extension types are + prepared during dependency installation. - Extension: explain when the running bsk daemon is too old to connect, with its version, a copyable update command and restart guidance in the popup. A toolbar warning and a notification make the problem visible before opening diff --git a/Cargo.lock b/Cargo.lock index 27bea1788..91cdaea27 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -134,7 +134,7 @@ dependencies = [ [[package]] name = "bsk" -version = "0.3.3" +version = "0.4.0" dependencies = [ "anyhow", "base64", @@ -176,7 +176,7 @@ dependencies = [ [[package]] name = "bsk-protocol" -version = "0.3.3" +version = "0.4.0" dependencies = [ "indexmap", "schemars", diff --git a/Cargo.toml b/Cargo.toml index 604bd625c..119b4f944 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ default-members = ["crates/bsk-cli"] [workspace.package] -version = "0.3.3" +version = "0.4.0" edition = "2024" rust-version = "1.85" license = "MIT" @@ -43,7 +43,7 @@ rand = "0.8" uuid = { version = "1", features = ["v4", "serde"] } # Workspace crates (version required for `cargo publish` of dependents) -bsk-protocol = { version = "0.3.3", path = "crates/bsk-protocol" } +bsk-protocol = { version = "0.4.0", path = "crates/bsk-protocol" } [profile.release] strip = "symbols" diff --git a/README.md b/README.md index 1272a8246..22785eb65 100644 --- a/README.md +++ b/README.md @@ -68,12 +68,13 @@ These and other agents that can run shell commands use the same **`bsk` CLI**. * | Your goal | What BrowserSkill provides | | --- | --- | | **Work where you are already signed in** | Read documents, search internal sites, and complete web workflows with the browser's existing login state. | -| **Turn instructions into browser actions** | Read page text and controls, click, type, fill forms, and manage tabs. Capture viewport or full-page screenshots; upload and download files in local mode. | -| **Stay in control of the task** | Follow the agent in its own window, explicitly borrow an existing tab, or take over for login, verification, and other steps that need you. | +| **Turn instructions into browser actions** | Read page text and controls, click, type, fill forms, drag items, select ranges, and manage tabs. Capture viewport or full-page screenshots; upload and download files in local mode. | +| **Stay in control of the task** | Work alongside the agent with shared control, pause it while you edit, and let it reconcile your changes before continuing. Tasks remain visible in their own window; existing tabs can be explicitly borrowed. | | **Take web data with you** | Export loaded tables and lists as JSON/CSV, with column names, page/frame sources, merged-cell metadata, and explicit coverage. [Structured extraction](docs/structured-extraction.md) | | **Find the evidence behind a failure** | Connect actions to requests, response bodies, console messages, and page changes. Inspect performance, slow APIs, and suspected duplicate requests; test a hypothesis with explicit HTTP rules or request replay. [Website debugging](docs/website-debugging.md) | | **Keep a replay of the work** | Record one authorized task tab as a silent MP4, then preview, save, or delete it from the extension. [Task video recording](docs/video-recording.md) | | **Continue when the page is ready** | Wait for a requested element condition with an explicit timeout before the next step. [Element waits](docs/wait-for-element.md) | +| **Reuse what you already observed** | Execute one chosen action and synchronize with `step`; explicitly save the full observation, then search or read it with `view` without another browser capture. [Steps and saved observations](crates/bsk-cli/skill/references/step-and-cache.md) | | **Use the right browser for the job** | Name browser instances, bind a task to a specific profile, or pair a server-side agent with the browser on your computer. [Browser profiles](docs/browser-profiles.md) | | **Review what happened** | Reopen browser-local debugging history, export evidence as JSON, or enable a separate operation audit to review task activity. [Operation audit](docs/operation-audit.md) | @@ -197,7 +198,7 @@ In WorkBuddy/CodeBuddy, or hosts that reap command children, the agent should re The [DSH plugin](packages/dsh-plugin-browserskill/README.md) adds native `bsk_*` tools, browser task previews, and screenshot results to the DeepSeek Harness Web UI. It uses the same `bsk` CLI and extension and includes its own BrowserSkill skill. -**Upgrading to 0.3.3:** update the CLI and extension before the plugin. The six `browser_*` tools have been renamed to `bsk_*`, without aliases for the old names. Update custom tool calls and policies, restart the DSH profile, and invoke `/browser-skill` again in existing conversations. See the [migration guide](packages/dsh-plugin-browserskill/README.md#breaking-tool-api-migration-033). +**Upgrading to 0.4.0:** update the CLI and running daemon first, then the extension and plugin. Restart the DSH profile and invoke `/browser-skill` again so existing conversations load the shared-control instructions and new drag, step and saved-observation tools. See the [0.4.0 upgrade guide](packages/dsh-plugin-browserskill/README.md#upgrading-to-040); installations older than 0.3.3 also need the [tool-name migration](packages/dsh-plugin-browserskill/README.md#breaking-tool-api-migration-033). With DeepSeek Harness, pnpm, and `bsk` installed and the extension connected, add the plugin to your profile: @@ -269,6 +270,8 @@ The built-in server supports device pairing, renewal, and revocation. The `bsk u By default, an Agent Window shares the selected profile's login state; **it is not a separate account or security sandbox**. Agents can act with the permissions of the signed-in websites, so choose the tasks and agent you trust. +New tasks enable shared control automatically. BrowserSkill observes page changes and supported manual activity in controlled tabs so the agent can yield while you edit and synchronize before acting again. This coordination works even when debugging, audit and video recording are off. Use the task's manual hold and resume controls to keep control while you work. [Shared-control guide](crates/bsk-cli/skill/references/cooperation.md) + The extension has two independent **Automation settings**, both enabled by default: | Setting | What it controls | @@ -285,6 +288,7 @@ BrowserSkill does not operate a mandatory cloud service or collect product telem | **Website debugging** | The current browser profile, including in remote mode | Retains captured evidence, including available bodies and field values. Stopped records expire after 30 days, with a 50-record / 50 MiB retention budget and earlier eviction when necessary. Stop capture before deleting a record. | | **Operation audit** | The daemon's host, under `BSK_HOME/audit` | Off by default. Records task and operation metadata, excluding input values, page bodies, screenshots, and file contents. Ended tasks expire after 30 days. | | **Task video** | The current browser profile; exported copies at the chosen destination | Opt-in, silent capture of one authorized tab, limited to 10 minutes / 256 MiB per video. Recordings expire 24 hours after creation; the temporary video budget is 1 GiB. The library supports preview, export and deletion. | +| **Saved observations and step results** | An explicitly chosen JSON path on the CLI machine, including a remote server | `--save-full` / DSH `saveFull` saves the complete reply before display filtering. Files have no automatic expiry; delete them on that machine. `view` reads historical evidence without refreshing the browser state. | These features offer export and deletion. Stopping a task or disconnecting does not delete retained history or videos; expiration is applied during access or cleanup. Exported copies and copies already received by an agent or gateway must be managed separately. Known secrets are filtered from debugging evidence, but redaction cannot guarantee that all sensitive data is removed. Video frames are not automatically redacted; review visible content before sharing. @@ -292,6 +296,10 @@ These features offer export and deletion. Stopping a task or disconnecting does ## Updating +**For 0.4.0, update the CLI and restart its running daemon before updating the extension; update DSH last.** The new extension requires daemon protocol 1.6 or later, while CLI/daemon 0.3.3 uses 1.3. Updating only the binary leaves a foreground or externally managed daemon on its old version until its host restarts it. Use matching 0.4.0 components for the new features. + +Existing scripts must follow the [shared-control workflow](crates/bsk-cli/skill/references/cooperation.md): after initial navigation, synchronize with `bsk cooperate sync`, pass its `--context` to one action, then synchronize again. Reload the updated skill instead of continuing with old instructions. + Finish active browser tasks, then update the CLI: ```sh diff --git a/README.zh-CN.md b/README.zh-CN.md index 1492cf216..75bd452e9 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -68,12 +68,13 @@ https://github.com/user-attachments/assets/959cb520-80ba-4b9e-b6d8-d94523b03693 | 你想完成的事 | BrowserSkill 如何帮忙 | | --- | --- | | **用已有账号,做网站任务** | 复用浏览器登录态,读取文档、搜索内部网站,完成需要登录的网页流程。 | -| **一句指令,落实到操作** | 读取页面文本和控件,点击、输入、填写表单、管理标签页;截取可见区域或完整页面,在本地模式上传和下载文件。 | -| **Agent 操作,你来掌控** | 任务在独立窗口中可见运行,也可显式借用已有标签页;登录、验证等需要人工参与的步骤,由你接手。 | +| **一句指令,落实到操作** | 读取页面文本和控件,点击、输入、填写表单、拖拽元素、选择范围、管理标签页;截取可见区域或完整页面,在本地模式上传和下载文件。 | +| **Agent 操作,你来掌控** | 共享控制让你与 Agent 协作;编辑时暂停 Agent,让它核对你的改动后继续。任务在独立窗口中可见运行,也可显式借用已有标签页。 | | **网页表格,导出即用** | 将已加载的表格和列表导出为 JSON/CSV,保留列名、页面/frame 来源、合并单元格信息和完整性标记。[结构化提取](docs/structured-extraction.md) | | **操作出错,找到线索** | 关联操作、请求、响应正文、控制台和页面变化,检查性能、慢接口与疑似重复请求;用明确配置的 HTTP 规则或请求重放验证判断。[网站调试](docs/website-debugging.md) | | **录下过程,随时回看** | 将一个已授权的任务标签页录制为无声 MP4,在扩展中预览、保存或删除。[任务视频录制](docs/video-recording.md) | | **页面就绪,再做下一步** | 设置明确的超时,等待目标元素满足指定条件后再继续操作。[元素等待](docs/wait-for-element.md) | +| **已经观察,按需复用** | 用 `step` 执行一个已决定的动作并同步状态;明确保存完整观察结果,再用 `view` 搜索或分段阅读,无需重新采集页面。[步骤与观察结果保存](crates/bsk-cli/skill/references/step-and-cache.md) | | **浏览器与账号,选对再开工** | 为浏览器实例命名,让任务绑定指定 Profile;也可以让服务器上的 Agent 连接你电脑上的浏览器。[浏览器 Profile](docs/browser-profiles.md) | | **任务结束,记录可查** | 重新打开浏览器本地的调试历史、导出 JSON,或单独开启操作审计,查看任务执行记录。[操作审计](docs/operation-audit.md) | @@ -197,7 +198,7 @@ bsk session stop [DSH 插件](packages/dsh-plugin-browserskill/README.md) 在 DeepSeek Harness Web UI 中提供原生 `bsk_*` 工具、浏览器任务预览和截图结果。它使用同一套 `bsk` CLI 与扩展,并自带 BrowserSkill skill。 -**升级到 0.3.3:**先更新 CLI 和扩展,再更新插件。六个 `browser_*` 工具已改名为 `bsk_*`,不保留旧名称别名。请更新自定义工具调用和策略,重启 DSH profile,并在已有对话中重新调用 `/browser-skill`。详见[迁移指南](packages/dsh-plugin-browserskill/README.md#breaking-tool-api-migration-033)。 +**升级到 0.4.0:**先更新 CLI 和正在运行的 daemon,再更新扩展和插件。重启 DSH profile,并重新调用 `/browser-skill`,让已有对话加载共享控制指引及新增的拖拽、step 和观察结果读取工具。详见 [0.4.0 升级指南](packages/dsh-plugin-browserskill/README.md#upgrading-to-040);从 0.3.3 以前的版本升级时,还需要完成[工具名称迁移](packages/dsh-plugin-browserskill/README.md#breaking-tool-api-migration-033)。 安装好 DeepSeek Harness、pnpm 和 `bsk`,连接扩展后,将插件加入你的 profile: @@ -262,6 +263,8 @@ bsk session start --browser "工作账号" --no-focus --json ## 浏览器控制与隐私 +新任务默认启用共享控制。BrowserSkill 会观察受控标签页中的页面变化和受支持的手动活动,让 Agent 在你编辑时让出控制权,并在再次操作前同步状态。即使调试、审计和视频录制均关闭,这种协调仍会进行。你可以通过任务的手动接管与恢复功能决定何时继续。[共享控制指南](crates/bsk-cli/skill/references/cooperation.md) + 代理窗口共享所选 Profile 的登录态,**它不是独立账号,也不是安全沙盒**。Agent 可以使用已登录网站授予的权限执行操作,请选择你信任的 Agent 和任务。 扩展提供两个默认开启、相互独立的**自动化设置**: @@ -280,6 +283,7 @@ BrowserSkill 没有必须使用的云服务,也不收集产品遥测。自动 | **网站调试** | 当前浏览器配置中,远程模式也一样 | 保存采集到的数据,包括可获取的正文和字段值。已停止记录 30 天后过期,保留预算为 50 条/50 MiB,达到限制时可能提前清理。删除记录前需先停止采集。 | | **操作审计** | daemon 所在主机的 `BSK_HOME/audit` | 默认关闭。记录任务与操作元数据,不记录输入值、页面正文、截图或文件内容。已结束任务 30 天后过期。 | | **任务视频** | 当前浏览器配置;导出副本保存在指定位置 | 主动开启后,录制一个已授权标签页的无声视频;单个视频上限为 10 分钟/256 MiB,创建 24 小时后过期,临时视频预算为 1 GiB。视频库支持预览、导出和删除。 | +| **观察结果及 step 响应** | CLI 所在计算机上明确指定的 JSON 路径,也可能是远程服务器 | `--save-full`/DSH `saveFull` 会在显示过滤前保存完整响应。文件不会自动过期,需要在该计算机上删除;`view` 读取历史数据,不会刷新浏览器状态。 | 这些功能均支持导出和删除。结束任务或断开连接不会删除保留的历史或视频,过期数据会在访问或清理时处理。导出的文件、Agent 或网关已经收到的副本需要另行管理。调试数据会过滤已知敏感信息,但不能保证完全脱敏。视频画面不会自动脱敏,分享前请检查可见内容。 @@ -287,6 +291,10 @@ BrowserSkill 没有必须使用的云服务,也不收集产品遥测。自动 ## 升级 +**升级到 0.4.0 时,先更新 CLI 并重启正在运行的 daemon,再更新扩展,最后更新 DSH。** 新扩展要求 daemon 协议至少为 1.6,而 CLI/daemon 0.3.3 使用 1.3。仅替换二进制不会更新通过前台或外部进程管理器运行的旧 daemon,仍需在所属宿主中重启。使用新功能时请配套使用 0.4.0 组件。 + +已有脚本需要遵循[共享控制流程](crates/bsk-cli/skill/references/cooperation.md):首次导航后执行 `bsk cooperate sync`,将返回的 `--context` 用于一次操作,然后重新同步。请加载新版 skill,避免继续使用旧指令。 + 先结束正在执行的浏览器任务,再更新 CLI: ```sh diff --git a/apps/extension/PRIVACY.md b/apps/extension/PRIVACY.md index a63ddcf77..7331b8745 100644 --- a/apps/extension/PRIVACY.md +++ b/apps/extension/PRIVACY.md @@ -1,6 +1,6 @@ # BrowserSkill — Privacy Policy -**Last updated:** October 14, 2026 +**Last updated:** October 30, 2026 This Privacy Policy describes how the **BrowserSkill** browser extension (the "Extension") handles information when you install and use it. BrowserSkill is published as part of the open-source [BrowserSkill](https://github.com/Tencent/BrowserSkill) project. The source code is publicly auditable. @@ -27,24 +27,27 @@ Depending on the commands the user (via their AI agent) sends to the selected da | Category | What is accessed | Why | |---|---|---| | **Web page content** | The DOM, accessibility tree, HTML, and screenshots of pages controlled in the "Agent Window," tabs borrowed according to the browser's confirmation setting, or pages selected for user-initiated Quick Actions. | Required to read pages, locate elements, verify results, and capture requested screenshots. | -| **User input simulated by the agent** | Mouse clicks, keystrokes, and form values that the AI agent dispatches through the Chrome DevTools Protocol (CDP). | Required to perform automation actions the user has asked the agent to do. | +| **User input simulated by the agent** | Mouse clicks, drags, keystrokes, and form values that the AI agent dispatches through the Chrome DevTools Protocol (CDP). | Required to perform automation actions the user has asked the agent to do. | +| **Shared-control evidence** | Current observations of controlled pages, page and form changes, bounded manual-activity events, focus and control state, and observation context identifiers. | Used to coordinate human and agent actions, yield control during manual interaction, and reject actions based on stale page evidence. | | **Website debugging evidence** | For the selected tab while capture is active: request URLs, methods, headers, request and response bodies when available, status, timing, errors and related network metadata; console messages; agent actions and supported manual input, click, submission and navigation events; bounded visible page text, form-field values and page/performance context. Configured HTTP rules and replay outcomes are also recorded. | Used to inspect and reproduce website behavior, associate operations with requests and page changes, analyze performance, and review or export debugging history. | | **Tab and window metadata** | Tab IDs, URLs, titles and window IDs, including user tabs listed to select a tab for borrowing. | Required to target automation commands at the correct tab/window. | | **Local extension storage** | A randomly generated 8-character instance ID, an optional user-supplied label, feature preferences including the audit toggle, and optionally a paired endpoint and device credential. | Used to recognize this browser instance and restore user settings. | | **File transfers requested by the agent** | Local files explicitly supplied to `bsk upload`, and the file created by a single `bsk download` action. | Required to attach a task file to a web page or return a browser-generated download to the invoking local agent. | | **Screenshot exports requested by the user** | Screenshot image data, including full-page captures, and a suggested filename when the user chooses to save an image from the preview. | Used to save the requested image through the browser's Save As dialog. | | **Task video recordings** | Rendered frames of the selected task tab; a silent MP4; and metadata such as tab title, task/tab IDs, timestamps, duration, quality, size, completion state and interruption reason. | Used to record an explicitly requested task, recover playable partial recordings, and let the user preview, export or delete the result. | -| **OS notifications** | System notifications for tab-borrow approval and agent requests for human assistance. | Used to request per-tab consent when browser confirmation is enabled, or alert the user to a task that needs manual action, such as login or verification, when human-help requests are enabled. | +| **OS notifications** | System notifications for tab-borrow approval, agent requests for human assistance, and an incompatible running daemon. | Used to request per-tab consent when browser confirmation is enabled, alert the user to a task requiring manual help when enabled, or explain why a daemon upgrade is needed. | ## 4. Data Collection Boundaries - The Extension sends automation results only to the daemon or gateway the user selects. BrowserSkill's authors do not receive telemetry or operate a mandatory hosted service. - The Extension does not independently call LLM, AI or cloud APIs and contains no AI provider API keys. +- Shared control is enabled for new tasks and their controlled tabs, including explicitly borrowed tabs. The Extension observes page changes and supported manual activity to coordinate that task even when website debugging, video recording and operation audit are off. This does not authorize access to unrelated tabs or start those optional recording features. - BrowserSkill does not enumerate the browser's browsing-history database, bookmarks, saved passwords or autofill databases. Website debugging creates its own history of the selected tab's activity during capture; this is separate from the browser's browsing-history database. Download handling supports user-requested screenshot and MP4 exports and the download initiated by an active local `bsk download` call; it does not enumerate download history. - Website debugging starts only when explicitly requested by the user or their agent. Each capture targets one task-created or borrowed tab per task, including network evidence from its frames. Merely opening a tab or moving it into the Agent Window does not authorize capture. During capture, supported manual actions in the selected page are recorded as well as agent actions. - Stopping capture, returning or closing its tab, ending its task, or disconnecting stops new collection but does not delete saved debugging history. After a browser or extension restart, unfinished captures are recovered as interrupted rather than automatically resumed. - Video recording starts only when explicitly requested by the user or their agent and targets one task-created or borrowed tab. It captures that tab's rendered content, including visible manual activity, without following switches to other task tabs. It does not request microphone or system audio. Recording stops at its time or size limit, or when its tab, task or connection ends; interrupted recordings may retain a playable partial result. Closing the extension popup does not stop an active recording. - Automation uses the existing browser profile. Controlled pages may expose personal data and signed-in website sessions; pairing with a server allows its Agent to operate those pages. +- Incognito tasks require the browser's Allow in incognito setting and cannot borrow ordinary tabs. They use the profile's incognito website session, shared with its other incognito windows. Incognito does not prevent requested observations, debugging evidence, recordings or exported files from being transmitted or retained under the rules in this policy. - The Extension includes no analytics, advertising, fingerprinting or cross-site tracking system and does not sell user data. ## 5. Permissions Justification @@ -60,7 +63,7 @@ The Extension requests the following Chrome permissions. Each is used solely for - **`windows`** — Create and manage the dedicated Agent Window that isolates agent activity from the user's normal browsing. - **`alarms`** — Periodically wake the service worker to keep the selected connection alive and renew remote device authorization. - **`idle`** — Detect when the device returns from idle/locked so the Extension can promptly re-establish the selected WebSocket connection after the machine wakes. No idle data is stored or transmitted. -- **`notifications`** — Request user approval before borrowing a user-owned tab when browser confirmation is enabled, and alert the user when an active task requests human assistance, such as login or verification, when human-help requests are enabled. Notifications support the user's browser task and are not used for advertising or promotional messages. +- **`notifications`** — Request user approval before borrowing a user-owned tab when browser confirmation is enabled, alert the user when an active task requests human assistance when enabled, and notify the user when an incompatible running daemon prevents connection. Notifications support the user's browser task and are not used for advertising or promotional messages. - **`downloads`** — Save screenshots, including full-page captures, and recorded MP4 videos when the user explicitly exports them. Track the requested video's download to distinguish successful saves from canceled or failed saves and release its temporary download URL. Also correlate and route the one browser download initiated by an active `bsk download` command. If that claimed transaction fails, BrowserSkill cancels an in-progress file or removes its completed temporary browser file. It is not used to enumerate download history or alter unrelated downloads. - **`offscreen`** — Run the video encoder worker and manage temporary video download URLs in an extension-owned offscreen document, allowing explicitly started recording and MP4 finalization to continue when the popup closes. This does not capture other tabs, the desktop or audio. - **`storage`** — Persist a random instance ID, optional label, and feature preferences in `chrome.storage.local`, and track pending video exports in `chrome.storage.session`. Remote credentials, website debugging history and the video catalog are stored separately in extension-origin IndexedDB; video files and recovery fragments use the origin-private file system (OPFS). @@ -74,6 +77,8 @@ The selected server receives task results, including requested page content, scr Website debugging history is saved in the current browser profile even when connected to a remote daemon. It is available in the Extension's history page without a daemon connection. The owning agent can request retained evidence while its task retains access to the target tab; ending that task or releasing the tab revokes that agent access, while the user can still review or export local history. Saving history does not automatically upload the entire archive to the selected server. Exported JSON files include retained evidence and can be shared by the user. +Shared-control replies can include observed page text, changes, activity evidence and action results returned through the selected daemon or gateway. When the user or agent explicitly supplies `--save-full` to CLI `cooperate sync` or `step` (DSH: `saveFull`), the complete reply is written as JSON to the specified path on the CLI machine, which may be a remote server. Display filtering does not remove content from that saved full reply. `bsk view` (DSH: `bsk_inspect action:view`) reads an existing file locally without a new browser capture; `--baseline` reuses eligible saved evidence during a live synchronization. File contents may enter the agent's context. + Screenshot exports are saved through the browser's Save As dialog to a location the user chooses. Exporting an image does not itself send the file to a daemon, gateway or external service; screenshots requested by an agent are returned as task results as described above. Video frames are encoded and temporarily saved in the current browser profile. Opening the local video library does not upload its recordings. Save MP4 as writes to the browser computer through the browser's Save As dialog. An authorized `bsk video save` or `stop --out` request transfers video bytes through the selected daemon or gateway and writes to the specified path on the CLI machine, which may be a remote server. The original connection owner with a valid recording access grant can retrieve the retained video after its task ends, until the recording expires or is deleted. Merely knowing a recording ID does not grant access. An agent or gateway receiving an exported video may retain or share it under its own policies. @@ -83,7 +88,8 @@ When explicitly configured by the user or agent during an active capture, HTTP r ## 7. Data Retention - The instance ID, optional label, and feature preferences persist in `chrome.storage.local` until the user uninstalls the Extension or clears extension storage. -- Outside website debugging and task video recording, page content, screenshots, DOM snapshots, and other observed data are returned to the selected daemon or gateway in response to commands and may be temporarily retained for an active semantic action recording or screenshot export until that operation ends or its results are released. Website debugging evidence and task videos follow the separate retention rules below. +- Outside website debugging and task video recording, page content, screenshots, DOM snapshots, and other observed data are returned to the selected daemon or gateway in response to commands. Shared control keeps bounded observations and activity state in memory for the active task; semantic action recording and screenshot export may retain temporary results until the operation ends or its results are released. Explicitly saved observation replies, website debugging evidence and task videos follow the separate rules below. +- Observation and step JSON files are created only when a save path is explicitly requested. They persist on the CLI machine until deleted by the user or agent, with no automatic expiry. Ending the task, clearing extension storage, uninstalling the Extension or closing an incognito window does not delete these files or copies already received by an agent or gateway. - Website debugging saves redacted evidence to extension-origin IndexedDB during capture and when capture stops. Stopped records expire after **30 days**, with automatic cleanup when history is read or written. History has retention budgets of **50 records / 50 MiB of serialized data**; older stopped records may be removed earlier to stay within these budgets, while active captures are protected from this cleanup. These budgets do not describe the exact disk size of IndexedDB. Per-capture limits can omit or evict individual requests, bodies and other evidence sooner. - Website debugging history survives task completion and disconnection. Users can delete stopped records from the history page; clearing extension storage or uninstalling removes local history. Previously exported files and copies already received by an agent or gateway are not deleted by these actions or by automatic expiration. - Task videos, recovery fragments and their catalog survive task completion and disconnection. Recordings expire **24 hours after creation** and expired data is removed on startup or catalog access. Each video is limited to **10 minutes / 256 MiB**, with a **1 GiB** temporary video budget that includes recovery and finalization files; browser storage limits may prevent a recording from starting earlier. Unexpired recordings are not silently deleted to make room. Users can delete retained videos from the library; clearing all extension-local data or uninstalling removes local video data. @@ -104,6 +110,8 @@ Users can at any time: - Stop video recording from its extension panel or ask the agent to stop it; stopping a video leaves the browser task running. Use the recent recordings page to preview, save or delete retained videos, including after a task ends. CLI users can use `bsk video stop`, `save` and `discard`. Stop an active recording before deleting it. - Turn operation audit off in Quick Features to stop collecting new audit operations while retaining existing audit history. Previously recorded tasks still receive their final lifecycle status. This switch does not stop website debugging capture or delete its history. - Close the Agent Window to stop all agent automation immediately. +- Use the task's manual-control hold and resume controls to coordinate agent actions. Moving a controlled tab out of its original Agent Window ends that session and leaves its pages in place; moving it back does not resume automation. These controls do not delete saved evidence or exports. +- Omit observation save options to avoid creating those JSON files, or delete previously saved files on the CLI machine. Browser storage controls do not manage these files. - Enable confirmation before borrowing and deny tab-borrow prompts to keep existing tabs off-limits. - Disable human-help requests in the Extension's interaction settings to prevent the agent from requesting manual assistance and sending the associated notifications. - Disable the connection, choose Local connection, or stop the selected daemon to disconnect. diff --git a/apps/extension/PRIVACY.zh-CN.md b/apps/extension/PRIVACY.zh-CN.md index 91f714a3b..c1a348bbf 100644 --- a/apps/extension/PRIVACY.zh-CN.md +++ b/apps/extension/PRIVACY.zh-CN.md @@ -1,6 +1,6 @@ # BrowserSkill 隐私政策 -**最后更新:** 2026 年 10 月 14 日 +**最后更新:** 2026 年 10 月 30 日 本隐私政策说明 **BrowserSkill** 浏览器扩展(下称"本扩展")在您安装和使用过程中如何处理信息。BrowserSkill 作为开源项目 [BrowserSkill](https://github.com/Tencent/BrowserSkill) 的一部分发布,源代码完全公开,可供审计。 @@ -27,24 +27,27 @@ BrowserSkill 让用户指定的 AI 助手通过 `bsk` 命令行工具操作 Chro | 类别 | 访问内容 | 用途 | |---|---|---| | **网页内容** | "代理窗口"中的受控页面、按浏览器确认设置借用的标签页,或用户主动使用快捷功能选择的页面中的 DOM、可访问性树、HTML 和截图。 | 用于读取页面、定位元素、验证执行结果和生成用户请求的截图。 | -| **AI 助手模拟的用户输入** | 通过 Chrome DevTools Protocol(CDP)派发的鼠标点击、键盘输入、表单值。 | 用于执行用户委托给 AI 助手的自动化操作。 | +| **AI 助手模拟的用户输入** | 通过 Chrome DevTools Protocol(CDP)派发的鼠标点击、拖拽、键盘输入、表单值。 | 用于执行用户委托给 AI 助手的自动化操作。 | +| **共享控制数据** | 受控页面的当前观察结果、页面及表单变化、有数量限制的手动活动事件、焦点和控制状态,以及观察上下文标识。 | 用于协调人与 Agent 的操作,在手动交互期间让出控制权,并拒绝基于过时页面状态的操作。 | | **网站调试数据** | 采集期间选定标签页的请求 URL、方法、请求头、可获取的请求与响应正文、状态、耗时、错误及相关网络元数据;控制台消息;Agent 操作与受支持的手动输入、点击、提交和导航事件;有数量及长度限制的可见页面文本、表单字段值、页面状态和性能数据。还会记录已配置的 HTTP 规则和请求重放结果。 | 用于检查和复现网站行为,将操作与请求及页面变化关联,分析性能,以及查看或导出调试历史。 | | **标签页与窗口元数据** | 标签页 ID、URL、标题和窗口 ID,包括为选择借用目标而列出的用户标签页。 | 用于将自动化指令发送到正确的标签页/窗口。 | | **扩展本地存储** | 一个随机生成的 8 位十六进制实例 ID、可选的用户自定义标签、功能偏好(包括审计开关),以及可选的远程端点和设备凭据。 | 用于识别此浏览器实例并恢复用户设置。 | | **Agent 请求的文件传输** | 用户明确提供给 `bsk upload` 的本地文件,以及单次 `bsk download` 操作产生的文件。 | 用于将任务文件附加到网页,或将浏览器生成的下载交给发起请求的本地 Agent。 | | **用户请求的截图导出** | 用户在预览页选择保存图片时的截图数据(包括长截图)及建议文件名。 | 用于通过浏览器的“另存为”对话框保存用户请求的图片。 | | **任务视频录制** | 选定任务标签页的渲染画面、无声 MP4,以及标签页标题、任务/标签页 ID、时间、时长、画质、大小、完成状态和中断原因等元数据。 | 用于录制明确请求的任务、恢复可播放的部分视频,并让用户预览、导出或删除结果。 | -| **系统通知** | 标签页借用授权通知,以及 Agent 请求人工协助的通知。 | 用于在浏览器借用确认开启时获取用户对该标签页的同意;或在允许请求人工协助时,提醒用户处理任务中需要手动完成的步骤,例如登录或验证。 | +| **系统通知** | 标签页借用授权、Agent 请求人工协助,以及正在运行的 daemon 不兼容的通知。 | 用于在浏览器借用确认开启时获取用户对该标签页的同意;在允许人工协助时提醒用户处理相关步骤;或说明为何需要升级 daemon。 | ## 4. 数据收集边界 - 自动化结果仅发送到用户选择的守护进程或网关。BrowserSkill 作者不接收遥测数据,也不提供必须使用的中间托管服务。 - 本扩展不会自行调用 LLM、AI 或云 API,不包含 AI 提供商的 API 密钥。 +- 新任务及其受控标签页默认启用共享控制,包括明确借用的标签页。即使网站调试、视频录制和操作审计均未开启,扩展也会观察页面变化及受支持的手动活动,以协调当前任务。这不会授予对无关标签页的访问权限,也不会启动上述可选录制功能。 - 本扩展不会枚举浏览器的浏览历史数据库、书签、保存的密码或自动填充数据库。网站调试会单独记录采集期间选定标签页的活动,这些调试历史与浏览器的浏览历史数据库相互独立。下载处理用于用户请求的截图和 MP4 导出,以及当前本地 `bsk download` 指令发起的下载;不会枚举下载历史。 - 网站调试仅在用户或其 Agent 明确发起时开始。每项任务的单次采集只针对一个由该任务创建或借用的标签页,包括其 frame 的网络数据。仅打开标签页或将其移入代理窗口不会授予采集权限。采集期间,选定页面中受支持的手动操作与 Agent 操作都会被记录。 - 停止采集、归还或关闭目标标签页、结束任务或断开连接,会停止收集新数据,但不会删除已保存的调试历史。浏览器或扩展重启后,未完成的采集会以中断状态恢复,不会自动继续采集。 - 视频录制仅在用户或其 Agent 明确请求时开始,只针对一个由任务创建或借用的标签页,记录其渲染画面,包括可见的手动操作;不会跟随任务切换到其他标签页。不请求麦克风或系统音频。达到时长或大小限制,或目标标签页、任务、连接结束时会停止录制;中断的视频可能保留可播放的部分结果。关闭扩展弹窗不会停止正在进行的录制。 - 自动化使用现有浏览器配置。受控页面可能包含个人数据和已登录的网站会话;配对服务器后,其 Agent 可以操作这些页面。 +- 无痕任务需要在浏览器中开启“允许在无痕模式下运行”,且不能借用普通标签页。它使用当前配置的无痕网站会话,与该配置中的其他无痕窗口共享登录状态。无痕模式不会阻止按本政策规则传输或保留请求的观察结果、调试数据、录制内容及导出文件。 - 本扩展不包含分析统计、广告、指纹识别或跨网站跟踪系统,也不出售用户数据。 ## 5. 权限使用说明 @@ -56,10 +59,11 @@ BrowserSkill 让用户指定的 AI 助手通过 `bsk` 命令行工具操作 Chro - **`scripting`** —— 选定页面缺少长截图辅助脚本时补充注入,例如扩展重新加载后。 - **`webNavigation`** —— 跟踪页面导航和 frame,让截图、录制与人工协助完成检查对应到正确的文档。 - **`tabs`** —— 在代理窗口内查询、创建、关闭标签页;读取标签页元数据。 +- **`tabGroups`** —— 在代理窗口中以橙色 BrowserSkill 标签组标识受控标签页,并在任务结束时移除该分组。 - **`windows`** —— 创建并管理独立的代理窗口,将助手的活动与用户的日常浏览隔离开。 - **`alarms`** —— 周期性唤醒 service worker,保持所选 WebSocket 连接并续期远程授权。 - **`idle`** —— 检测设备从空闲或锁定状态恢复,以便及时重新建立所选 WebSocket 连接;不保存或传输空闲状态数据。 -- **`notifications`** —— 浏览器借用确认开启时,请求用户授权借用已有标签页;在允许请求人工协助时,提醒用户处理当前任务中的登录、验证等手动步骤。通知仅服务于用户的浏览器任务,不用于广告或推广。 +- **`notifications`** —— 浏览器借用确认开启时,请求用户授权借用已有标签页;在允许请求人工协助时提醒用户处理相关步骤;正在运行的 daemon 不兼容、导致无法连接时提示用户。通知仅服务于用户的浏览器任务,不用于广告或推广。 - **`downloads`** —— 用户主动导出时保存截图(包括长截图)和录制的 MP4 视频。跟踪该视频的下载结果,区分成功、取消与失败,并释放临时下载 URL。同时关联和处理当前 `bsk download` 命令发起的单次下载。如果已认领的传输失败,BrowserSkill 会取消进行中的下载,或删除已完成的浏览器临时文件;不会枚举下载历史或更改无关下载。 - **`offscreen`** —— 在扩展自身的离屏文档中运行视频编码 worker,并管理临时视频下载 URL,让明确启动的录制和 MP4 生成可以在弹窗关闭后继续进行。不用于采集其他标签页、桌面或音频。 - **`storage`** —— 在 `chrome.storage.local` 中保存随机实例 ID、可选标签及功能偏好,在 `chrome.storage.session` 中跟踪尚未完成的视频导出。远程凭据、网站调试历史和视频目录与这些设置分开,保存在扩展来源的 IndexedDB 中;视频文件及恢复片段保存在来源私有文件系统(OPFS)中。 @@ -73,6 +77,8 @@ BrowserSkill 让用户指定的 AI 助手通过 `bsk` 命令行工具操作 Chro 网站调试历史始终保存在当前浏览器配置中,包括连接远程守护进程时;无需连接守护进程,也可在扩展的历史页面查看。原任务的 Agent 可在任务仍有权访问目标标签页时请求已保留的数据;任务结束或标签页归还后,该 Agent 的访问权限会撤销,用户仍可查看或导出本地历史。保存历史不会自动将整个历史库上传到所选服务器。导出的 JSON 文件包含已保留的调试数据,用户可自行分享。 +共享控制的响应可包含观察到的页面文本、变化、活动数据及操作结果,通过所选守护进程或网关返回。用户或 Agent 在 CLI 的 `cooperate sync` 或 `step` 中明确指定 `--save-full`(DSH 中为 `saveFull`)时,完整响应会以 JSON 写入 CLI 所在计算机的指定路径;该计算机可能是远程服务器。显示过滤不会移除完整保存文件中的内容。`bsk view`(DSH 中为 `bsk_inspect action:view`)只在本地读取已有文件,不会重新采集浏览器页面;`--baseline` 可在实时同步时复用符合条件的已保存数据。文件内容可能进入 Agent 上下文。 + 截图导出通过浏览器的“另存为”对话框保存到用户选择的位置。导出图片本身不会将文件发送给守护进程、网关或外部服务;Agent 请求的截图仍按上述方式作为任务结果返回。 视频画面在当前浏览器配置中编码并暂存。仅打开本地视频库不会上传视频。“另存为 MP4”通过浏览器的“另存为”对话框写入浏览器所在计算机。经过授权的 `bsk video save` 或 `stop --out` 请求会通过所选守护进程或网关传输视频数据,写入 CLI 所在计算机的指定路径;该计算机可能是远程服务器。任务结束后,持有有效视频访问授权的原连接所有者仍可读取已保留的视频,直到视频过期或被删除。仅知道视频 ID 不会获得访问权限。收到导出视频的 Agent 或网关可能按自身政策保留或分享视频。 @@ -82,7 +88,8 @@ BrowserSkill 让用户指定的 AI 助手通过 `bsk` 命令行工具操作 Chro ## 7. 数据保留 - 实例 ID、可选标签和功能偏好会保存在 `chrome.storage.local` 中,直到用户卸载本扩展或清除扩展存储。 -- 网站调试和任务视频录制以外的页面内容、截图、DOM 快照等观察数据,会作为对指令的响应返回给所选守护进程或网关;语义操作录制或截图导出等操作可在扩展中暂存数据,直到相关操作结束或结果释放。网站调试数据和任务视频遵循下述独立的保留规则。 +- 网站调试和任务视频录制以外的页面内容、截图、DOM 快照等观察数据,会作为对指令的响应返回给所选守护进程或网关。共享控制在当前任务的内存状态中保留有容量限制的观察结果和活动数据;语义操作录制或截图导出可暂存结果,直到操作结束或结果释放。明确保存的观察响应、网站调试数据和任务视频遵循下述独立规则。 +- 观察结果及 step JSON 文件仅在明确指定保存路径时创建,在 CLI 所在计算机上保留至用户或 Agent 删除,不会自动过期。结束任务、清除扩展存储、卸载扩展或关闭无痕窗口,都不会删除这些文件,也不会删除 Agent 或网关已经收到的副本。 - 网站调试在采集期间及停止时,将经过脱敏处理的数据保存到扩展来源的 IndexedDB。已停止的记录在 **30 天**后过期,读取或写入历史时自动清理。历史保留预算为 **50 条记录/50 MiB 序列化数据**;较早的已停止记录可能提前清理,以满足这些预算,正在采集的记录受到保护,不参与此类清理。这些预算不代表 IndexedDB 的实际磁盘占用量。单次采集的容量限制也可能更早省略或移除部分请求、正文及其他数据。 - 网站调试历史在任务结束或断开连接后仍会保留。用户可在历史页面删除已停止的记录;清除扩展存储或卸载扩展会删除本地历史。这些操作以及自动过期不会删除此前导出的文件,也不会删除 Agent 或网关已经收到的副本。 - 任务视频、恢复片段及其目录在任务结束或断开连接后仍会保留。视频在**创建 24 小时后**过期,启动或访问目录时清理过期数据。单个视频限制为 **10 分钟/256 MiB**,临时视频预算为 **1 GiB**,包括恢复片段和生成最终文件时的占用;浏览器存储限制可能更早阻止录制开始。不会为腾出空间而静默删除尚未过期的视频。用户可在视频库中删除保留的视频;清除扩展全部本地数据或卸载扩展会删除本地视频数据。 @@ -103,6 +110,8 @@ BrowserSkill 让用户指定的 AI 助手通过 `bsk` 命令行工具操作 Chro - 在扩展的视频面板停止录制,或让 Agent 停止;停止视频不会结束浏览器任务。通过最近录制页面预览、保存或删除保留的视频,任务结束后仍可使用。CLI 用户可使用 `bsk video stop`、`save` 和 `discard`。删除正在录制的视频前,需先停止录制。 - 在快捷功能中关闭操作审计,停止收集新的审计操作并保留已有审计记录;已记录任务仍会更新最终生命周期状态。此开关不会停止网站调试采集,也不会删除其历史。 - 关闭代理窗口,立即停止所有助手自动化操作。 +- 使用任务的手动接管与恢复功能协调 Agent 操作。将受控标签页移出原代理窗口会结束该会话,并将页面保留在原地;移回标签页不会恢复自动化。这些控制不会删除已保存的数据或导出文件。 +- 不使用观察结果保存选项,以免创建对应 JSON 文件;或在 CLI 所在计算机上删除之前保存的文件。浏览器存储设置不会管理这些文件。 - 开启借用前确认,并拒绝借用请求,使已有标签页保持不可访问。 - 在扩展的交互设置中关闭人工协助请求,阻止 Agent 请求手动协助及发送相关通知。 - 关闭连接开关、切回本地连接或停止所选守护进程。 diff --git a/apps/extension/package.json b/apps/extension/package.json index b45ba32fe..2f05674ae 100644 --- a/apps/extension/package.json +++ b/apps/extension/package.json @@ -1,6 +1,6 @@ { "name": "@browser-skill/extension", - "version": "0.3.3", + "version": "0.4.0", "private": true, "type": "module", "scripts": { diff --git a/packages/dsh-plugin-browserskill/README.md b/packages/dsh-plugin-browserskill/README.md index 2d2a66abc..e234000d8 100644 --- a/packages/dsh-plugin-browserskill/README.md +++ b/packages/dsh-plugin-browserskill/README.md @@ -54,6 +54,28 @@ dsh plugin --profile web update @wxg-prc-cpg/browser-skill-dsh-plugin --latest Restart that dsh profile after upgrading. This command updates the plugin; update the `bsk` CLI and browser extension separately when a release requires it. +### Upgrading to 0.4.0 + +Update the CLI and restart the running daemon first, then update the browser +extension, and finally update this plugin. The 0.4.0 extension requires daemon +protocol 1.6 or later; CLI/daemon 0.3.3 uses 1.3 and cannot connect. Updating the npm +package does not update the CLI, daemon or extension. Use matching 0.4.0 components +for drag, step and saved-observation workflows. + +Restart the DSH profile and invoke `/browser-skill` again in existing conversations. +The six `bsk_*` tool names remain unchanged. Shared control is now enabled for new +tasks: after initial navigation, call `bsk_session action:sync`, pass its returned +context identifier as `contextId` for one action, then synchronize again. Human +edits and changed page evidence can revoke a pending action; synchronize and replan +instead of repeating the old call. +Custom tool policies and integrations must allow the new actions they intend to use. + +Explicit `saveFull` results remain as JSON files on the CLI machine until deleted; +closing a browser task or clearing extension storage does not remove them. +See [cooperation](skill/references/cooperation.md) and +[steps and saved observations](skill/references/interaction-details.md#steps-and-saved-observations). +If upgrading from before 0.3.3, also apply the tool-name migration below. + ### Breaking tool API migration (0.3.3) The coordinated 0.3.3 release replaces all six `browser_*` tool names with stable @@ -285,20 +307,22 @@ The [Release dsh plugin workflow](https://github.com/Tencent/BrowserSkill/blob/m publishes the package and this README to npm. Pushing a `dsh-plugin-vX.Y.Z` tag triggers it; ordinary commits to `main` do not. -Before publishing the 0.3.3 plugin, publish the coordinated 0.3.3 CLI and extension. -Element waits require the implementation introduced in [#407](https://github.com/Tencent/BrowserSkill/pull/407). -The `cli-v0.3.0`, `cli-v0.3.1`, and `cli-v0.3.2` releases do not include this -command. Confirm the compatible CLI and extension release artifacts are available -before pushing the plugin tag; publishing the npm package alone does not upgrade -either component on users' machines. Older installations can still use the -[single-action recovery path](skill/references/interaction-details.md#element-waits). +Before publishing the 0.4.0 plugin, publish the coordinated 0.4.0 CLI and extension. +The extension's raised daemon protocol floor requires the CLI release to be +downloadable before the extension goes live. Confirm that the new CLI still +supports the intended basic workflows with the previous extension during rollout; +new shared-control, drag and step workflows require the matching components. +Publishing the npm package alone does not upgrade either component on users' machines. 1. Prepare a release PR that updates the shared CLI, extension and plugin version, local Cargo lock entries, changelog and relevant documentation. Merge it after validation and record the merge commit. -2. Tag that commit as `ext-v` and wait for the browser extension to become - available. Then tag the same commit as `cli-v` and wait for the complete - CLI release, including [Windows signing](../../docs/windows-signing.md). +2. Tag that commit as `cli-v` and wait for the complete public CLI release, + including [Windows signing](../../docs/windows-signing.md) and + [macOS signing and notarization](../../docs/macos-signing.md). `Release CLI` + builds alone are not publication; both `Publish CLI` verification jobs and its + final publish job must succeed. Synchronize store permission/privacy disclosures, + then tag the same commit as `ext-v` and wait for store availability. 3. Create `dsh-plugin-v` on that same merge commit and push only that tag: ```sh diff --git a/packages/dsh-plugin-browserskill/package.json b/packages/dsh-plugin-browserskill/package.json index 2a8139758..a80939799 100644 --- a/packages/dsh-plugin-browserskill/package.json +++ b/packages/dsh-plugin-browserskill/package.json @@ -1,7 +1,7 @@ { "name": "@wxg-prc-cpg/browser-skill-dsh-plugin", "description": "DeepSeek Harness tool plugin that exposes BrowserSkill browser automation (bsk_* tools) to the model", - "version": "0.3.3", + "version": "0.4.0", "license": "MIT", "publishConfig": { "access": "public",