Skip to content
dsh.fish
Bundle

dsh-tui-browser-use

Browser automation toolset for dsh-tui agents: Playwright-driven browser control with deepseek-v4-flash-vision-exp visual understanding.

Source
FlameTN7
stars
2 stars
License
MIT
Updated
Updated 11 hours ago

Readme

# dsh-tui-browser-use

[简体中文](README.md) | [English](README_EN.md)

> 给 dsh-tui 的 agent 装上"看得见网页"的浏览器自动化工具。

**dsh-tui-browser-use** 是 [dsh-tui](https://github.com/ccch1mneyyy/dsh-TUI) 的子插件(Cordis 插件),随 `dsh --profile dsh-tui` 组合加载。它向 agent 注册 **21 个 `browser_*` 工具**,用 [Playwright](https://playwright.dev/) 驱动真实浏览器,并原生适配DeepSeek视觉模型理解截图,返回经 schema 校验的结构化结果。

## 功能特色

- **21 个工具**:提供 21 个 `browser_*` 原子工具,覆盖导航、交互、DOM 快照提取、视觉分析与多步自主任务。
- **超级拼装**: 针对 DeepSeek 识图后端的压缩限制,自动进行长宽页滚动分段、切片与分辨率保真,避免关键信息因压缩失真。
- **会话能力**:支持持久化登录态(Profile)与一次性临时会话(Isolated),内置并发锁与防冲突降级机制,支持跨设备打包迁移。
- **安全策略**:内置视觉 Prompt 注入防护与敏感参数脱敏;默认拦截 `file:` 协议与 SSRF(云元数据),文件写盘严格限制在工作区内。
- **浏览器引擎支持**:chromium(默认内嵌,可跨平台)/ firefox / webkit,配置可进 dsh-tui `/settings` 面板修改。

## 架构

```
┌─────────────────────────────────────────────────────────────────┐
│        dsh --profile dsh-tui (Cordis 组合)              
│                                                          
│  dsh-tui-browser-use (本插件)                            
│    ├── src/index.ts            插件入口 + 配置/公共导出    
│    ├── src/tools/registry.ts   注册 browser_* 工具(逐工具注销)
│    ├── src/browser.ts          Playwright 浏览器会话管理   
│    │     └─ driver/            BrowserDriver + PlaywrightDriver 
│    ├── src/vision/             VisionAdapter 双实现        
│    │     ├─ deepseek-file-adapter (Files API 原生)       
│    │     └─ openai-compat-adapter (base64 内联)          
│    ├── src/session-profiles.ts 会话档案/锁/存储态原子写     
│    ├── src/runtime-env.ts      集中注入 DSH_TUI_* 环境变量 
│    ├── src/capabilities.ts     provider 能力判定          
│    ├── src/image-pipeline.ts   截图捕获期压缩/尺寸校验/切分 
│    ├── src/i18n.ts             双语 UI 字典               
│    └── src/settings-section.ts 注册 /settings 设置区块     
└──────────────────────────────────────────────────────────────────┘
```


## 工具一览

| 类别 | 工具 | 说明 |
|---|---|---|
| 导航 | `browser_navigate` / `back` / `forward` / `reload` | 返回标题 + URL + 状态码 |
| 交互 | `browser_click` / `type` / `hover` / `press` / `scroll` / `wait` | 支持 `text=`/`role=`/`label=`/CSS 定位;`type` 可选 `clear` + `enter` |
| 观察 | `browser_screenshot` / `snapshot` / `evaluate` | 截图 + 视觉分析(`oversizeTiles` 报告超字节预算的段数);DOM 元素索引快照(节点带跨调用稳定 `id`,可选 `delta` 返回增量);页面内 JS 求值 |
| 提取/任务 | `browser_extract` / `task` | schema 校验 + 失败重试 ≤2;自然语言多步循环,累计成本 |
| 会话 | `browser_cookies` / `console_messages` / `network_requests` / `pdf` / `download` / `status` | cookie 值默认掩码、`readValues` 可选;console/网络捕获;PDF/下载;`browser_status` 额外报告运行期会话档案(`value.session`:mode/profile/profileDir 脱敏/degraded) |

## 部署

### 安装与挂载

```sh
npm install dsh-tui-browser-use
npx playwright install chromium --with-deps   # Linux;Windows/macOS 去掉 --with-deps
```

> 兼容性:本插件面向 **dsh-tui v0.10.0**版本,依赖其提供`tools` / `credentials` / `settings` / `tuiSettingsSections` / `skills` 等 harness 服务。

在 dsh-tui profile 的 `cordis.patch.yml` 挂载:

```yaml
- insert:
    - id: dsh-tui-browser-use
      name: 'dsh-tui-browser-use'
      config:
        visionMode: 'auto'
```

`postinstall` 会检测系统 Chrome / Playwright Chromium,缺失时输出可复制的安装命令;也可用 `DSH_TUI_BROWSER_EXECUTABLE` 直接指向已有 Chromium。

### 会话档案模式(可选)

`session` 配置块管理浏览器登录态档案:

```yaml
config:
  visionMode: 'auto'
  session:
    mode: 'persistent'   # persistent 保留固定命名档案(重启登录仍在);isolated 每次独立临时档案
    profile: 'default'    # 档案目录名(`^[A-Za-z0-9._-]{1,64}$`,拒绝 `.`/`..`)
```

- 目录布局:`<档案根>/profiles/<name>/user-data`(含 cookies/登录态)、`<档案根>/states/<name>.storage-state.json`(原子写、0644→0600)、`<档案根>/ephemeral/<run-id>/`(isolated 临时档案,关闭即清理)。
- 档案根为跨平台缓存目录:Linux `$XDG_CACHE_HOME`(默认 `~/.cache`)→ macOS `~/Library/Caches` → Windows `%LOCALAPPDATA%`,下挂 `dsh-tui-browser-use`。
- 整目录可打包迁移:把 `profiles/<name>/` 复制到另一台机器/路径,将 `session.profile` 指向它,登录态即随档案迁移。


### 设置面板

本插件于dsh-tui注册命名空间,可于dsh-tui的/settings看见常用设置,部分设置需要会话重启后生效

### 环境变量覆盖(可选)

常用配置也可经环境变量覆盖,部分需会话重启后生效:

| 变量 | 作用 | 默认 |
|---|---|---|
| `DSH_TUI_BROWSER_PROVIDER` / `_MODEL` + `OPENAI_API_KEY` | 切换到 OpenAI 兼容视觉路由(非 DeepSeek 端点) | 内置 `deepseek` 路由 |
| `DSH_TUI_BROWSER_BASE_URL` | 非 DeepSeek/OpenAI provider 必填端点(如 Anthropic/Gemini 网关)。未设时该类 provider 降级为纯 DOM,不会误发到 OpenAI 端点 | `deepseek`/`openai` 内置端点 |
| `DSH_TUI_BROWSER_DIALOG` | 弹窗策略 `dismiss` / `accept` / `ignore` | `dismiss` |
| `DSH_TUI_BROWSER_ENGINE` | 浏览器引擎 `chromium` / `firefox` / `webkit` | `chromium` |
| `DSH_TUI_BROWSER_PROXY` / `_PROXY_BYPASS` | 外网代理(浏览器启动时读取) | 无 |
| `DSH_TUI_BROWSER_TIMEOUT_NAVIGATION` / `_ACTION` / `_SETTLE` | 导航 / 动作 / 收敛超时(ms) | 45000 / 12000 / 6000 |
| `DSH_TUI_BROWSER_USER_DATA_DIR` / `_STORAGE_STATE` | 外部会话目录 / 登录态快照(读取失败回退全新会话) | 内置档案根 |
| `DSH_TUI_BROWSER_NO_SANDBOX` | 强制注入 `--no-sandbox`;未设时仅在 root/容器(uid===0)下自动注入 chromium 的容器参数 | 自动(仅 root/容器) |
| `DSH_TUI_BROWSER_WORKSPACE` | 额外允许写入的 workspace 根(与 CWD/临时目录并列) | 无(仅 CWD/临时目录) |
| `DSH_TUI_BROWSER_WRITE_ANY` | `1` 放开“任意路径写盘”(安全 opt-in,默认拒绝工作区外写入) | `0` |
| `DSH_TUI_BROWSER_ALLOW_UNSAFE_URL` | `1` 放开 URL 策略(`file:` / 云元数据/link-local),使 `browser_navigate` 也能访问 `file:`(其下载 `file:` 现走本地读取);默认导航与下载都拦截 | `0` |
| `DSH_TUI_BROWSER_MAX_DOWNLOAD_BYTES` | 单次 `browser_download` 缓冲上限(超限返回 `response too large`) | 100MB |
| `DSH_TUI_BROWSER_CNY_USD_RATE` | 成本估算的 USD→CNY 汇率 | 7.2 |

## 视觉管线(简述)

```
Playwright 截图
  → 捕获期 JPEG 压缩(品质 80→60→40 阶梯,超预算降档);管线尺寸/字节校验
  → 超过 tiling.threshold? → 滚屏分段(原生分辨率多图,含宽页分列)
  → DeepSeek Files API → file_id 引用(过期前按内容 hash 复用,命中 prompt cache)
  → OpenAI 兼容端点 → base64 内联
```

## 构建与验证

```sh
npm run build           # tsc → lib/types/
npm run check           # CI 门禁:build + smoke(21 tools) + manifest + i18n + router
npm run test:logic      # 20 个纯逻辑回归(无需浏览器/key;含会话档案/启动失败锁释放/快照 delta/驱动契约/密钥探测/运行时环境/provider 路由守卫/minimal 装配门控等)
npm run test:container  # stub harness 加载产物 + 真实启动浏览器(21 工具注册)
npm run test:integration # 真实浏览器集成(导航/点击/输入/截图/切分/快照)
npm run test:storage-state # storageState 损坏回退 + persistent 导入(真实浏览器)
```

## 架构扩展点

插件核心逻辑与底层浏览器驱动完全解耦,不向外暴露原生 `page` / `context` 句柄。

- **替换浏览器后端**:`BrowserSession` 仅依赖 `BrowserDriver` 抽象接口。如需接入非 Playwright 后端(如 Puppeteer 或独立 CDP 连接),只需实现该契约并通过 `dsh-tui-browser-use/driver` 注入自定义实现。
- **自定义视觉路由**:通过 `dsh-tui-browser-use/vision` 的 `createVisionAdapter`,可自由切换或扩展图像传输策略(默认支持 DeepSeek Files API 与 OpenAI 兼容 base64)。
- **工具扩展**:通过 `registerTools` 注入自定义会话与视觉解析器,便于宿主包装或拦截工具行为。


## 说明与反馈

目前功能实现与全部测试回归均基于无头 Linux(Headless)环境验证。如有边界场景异常或优化建议,欢迎提 Issue / PR 交流。

## 文档

- 技能文档:`skills/browser-bridge/SKILL.md`

## License

[MIT](LICENSE)

Install

dsh plugin --profile web add github:FlameTN7/dsh-tui-browser-use

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source