# dsh-builtin-browser **Repository Path**: xeval/dsh-builtin-browser ## Basic Information - **Project Name**: dsh-builtin-browser - **Description**: 个性化调整 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-16 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

GitHub stars npm version MIT License DeepSeek Harness plugin Platform: Windows (verified)

中文 · English

为 DeepSeek Harness 生态打造的共享真实浏览器插件(装好即用,人机同页)

agent 驱动一个真实、可见、可随时人工接管的浏览器——人与 agent 操作的是同一个页面。

## 文档 | 目标 | 入口 | | --- | --- | | 了解插件为什么存在、与无头方案的区别 | [为什么做共享真实浏览器](docs/why-browser.md) | | 安装、配置与日常使用 | [用户指南](docs/user-guide.md) | | 全部 33 个工具的参数、输出与示例 | [工具参考](docs/tool-reference.md) | | 了解 seam / provider / 工具三层与自托管实现 | [架构说明](docs/architecture.md) | | 查看全部文档与 README 分工 | [文档索引](docs/README.md) | ## 这是什么 `dsh-builtin-browser` 给 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 提供浏览器能力: - **真实视图,而非转播**:浏览器是原生 `WebContentsView`,用户直接看到 agent 在做什么,随时可以上手接管; - **装好即用**:有桌面外壳时嵌入外壳视图;纯 `dsh web` 也能**自托管**——插件自己拉起一个 Electron 窗口,不需要任何额外配置; - **一插件即一套工具**:安装后 agent 自动获得 33 个 `browser_*` 工具(打开、查看、无障碍树、等待、语义/坐标操作、滚动、回退、批量/单控件填表、按键、结构化提取、截图、下载、登录态管理……)。 一句话:**安装插件 = 获得一个与用户共享、可被 agent 驱动的真实浏览器。** ## 快速开始 ```sh # 方式一:从 npm 安装(已发布) dsh plugin --profile web add dsh-builtin-browser # 方式二:从源码目录安装(独立仓库,一插件一仓库) dsh plugin --profile web add <本仓库路径> ``` 安装后,agent 即可使用浏览器工具,例如: | 想做什么 | 用哪个工具 | 说明 | | --- | --- | --- | | 打开页面 | `browser_open` | 打开 URL,返回带编号元素的快照 | | 了解页面 | `browser_snapshot` | 输入框/按钮/链接的编号清单,可据此定位 | | 操作页面 | `browser_execute` | 在页面里执行 JS(原生 setter,框架友好) | | 填写表单 | `browser_fill` | 一次填写多个字段,可选提交 | | 看到页面 | `browser_screenshot` | PNG 截图,可存文件交给视觉模型 | 完整清单见[工具参考](#工具参考)。 ## 主要功能

共享真实浏览器

原生视图而非无头截屏。用户与 agent 操作同一个页面:用户能看到每一步,随时接管;agent 驱动的就是用户眼前那个窗口。

DOM 级驱动,框架友好

browser_snapshot 返回带编号的交互元素;browser_execute 在页面内执行 JS(受控输入用原生 setter + input/change 事件),React/Vue 页面也能可靠交互。

多标签会话

并行打开 URL,查看/切换/关闭/重置标签,每个会话的状态独立保持。

多格式内容

以 html / markdown / txt / json 抓取页面,支持 CSS selector 限定、字符上限与超时控制。

任务级会话隔离

每个 DSH 任务(会话)拥有独立的浏览器会话(独立标签页与历史),并发任务互不抢页面、互不污染;同一任务内多次调用复用同一会话。

登录态持久化

browser_auth 导出/恢复 cookie,重启后登录态不丢;自托管实例的 cookie 本身也落盘持久。

人机验证识别

自动检测 Cloudflare / reCAPTCHA / hCaptcha / Turnstile 等挑战(browser_challenge,快照也会标注),提示人工在共享窗口完成,不再盲目重试。

批量表单填充

browser_fill 一次填写多个字段:按选择器/名称/标签匹配,支持受控输入、下拉、单选/复选,可选提交;单个字段失败不影响其余字段。

操作历史与回放

browser_history 记录操作日志(打开/执行/点击/输入/填表/下载/登录),browser_replay 可按序号回放某一步。

带登录态下载

browser_download 在页面上下文内携带会话 cookie 拉取文件并落盘,登录后才能访问的内容也能直接下载。

安全限制

browser_restrict 限制允许的浏览器动作(白名单),防止 agent 误点、误导航;只读工具(snapshot/content/screenshot)不受限。

截图即存即读

browser_screenshot 支持 savePath 直接落盘 PNG,交给视觉模型(modlens 等)做基于视觉的元素定位。

## 为什么选它 - **装好即用,零配置**:不需要桌面外壳、不需要额外启动步骤;纯 `dsh web` 环境自托管拉起 Electron 窗口,`browser_*` 工具照常可用。 - **人机协同,互不干扰**:用户能看到并接管 agent 的每一个动作;任务级会话隔离让多个并行任务各自拥有独立的标签页与历史。 - **面向真实世界的自动化**:人机验证识别、登录态持久化、批量填表、带登录态下载、操作回放、动作限制——把"真实浏览器"变成可靠的 agent 能力。 - **可测试、可替换的架构**:provider 与 Electron 通过 `ElectronBrowserViewHost` 接缝解耦,同一套工具层未来可对接无头转播 provider,无需改动模型侧。 ## 工具参考 | 工具 | 用途 | 守卫 | | --- | --- | --- | | `browser_open` | 打开 URL(可选新标签),返回页面快照 | ✅ | | `browser_wait` | 等待页面加载完成(可选期望 URL / CSS 选择器),返回是否就绪 | – | | `browser_snapshot` | 交互元素(输入框/按钮/链接)带编号清单(穿透同源 iframe 与 Shadow DOM) | – | | `browser_a11y` | 无障碍树:每个交互节点的语义角色/名称/值/状态 + 坐标(穿透同源 iframe 与 Shadow DOM) | – | | `browser_execute` | 在页面执行 JS;参数以 `arguments[0..n]` 传入 | ✅ | | `browser_content` | 以 html / markdown / txt / json 抓取页面(selector、maxChars、timeoutMs) | – | | `browser_click` | 点击:语义目标(`target`: css/text/xpath,滚动到元素并点中心)或视口坐标(配合截图视觉定位) | ✅ | | `browser_type` | 输入文本(可先按 `target` 聚焦元素;CDP `Input.insertText`) | ✅ | | `browser_key` | 按命名按键(Enter/Tab/方向键/Home/End 等) | ✅ | | `browser_scroll` | 滚动页面(像素增量 / 选择器定位 / 顶部底部) | ✅ | | `browser_back` | 页面历史后退一步(无前项时为空操作) | ✅ | | `browser_forward` | 页面历史前进一步(无后项时为空操作) | ✅ | | `browser_refresh` | 刷新当前页(等价浏览器的刷新按钮) | ✅ | | `browser_fill` | 批量填充表单(选择器/名称/标签匹配,受控输入、下拉、单选/复选,可选提交) | ✅ | | `browser_set_value` | 单个控件设值(按 `target` 定位;原生 setter + input/change,React 受控输入可用) | ✅ | | `browser_check` | 勾选/取消勾选 checkbox 或 radio(按 `target` 定位) | ✅ | | `browser_select` | 选中 `