🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

浏览器操控 Xumi0920/dsh-browser-harness

DeepSeek Harness
Xumi09202 天前有提交已提供中文文档扫描:含敏感能力

直连已登录浏览器,按任务分组标签页并抓取页面内容

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Xumi0920/dsh-browser-harness
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · browser
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 23 处,展示前 21 条)
  • 读取本地文件
    lib/skill.ts:40
    parsed = parseSkillFile(readFileSync(SKILL_FILE, "utf8"));
  • 读取本地文件
    src/cdp/endpoint.ts:59
    const raw = await readFile(file, "utf8");
  • 读取本地文件
    src/page.ts:70
    stats = await lstat(current);
  • 读取本地文件
    src/page.ts:79
    const realNearest = await realpath(nearestExisting).catch(() => {
  • 写入本地文件
    src/page.ts:570
    await mkdir(base, { recursive: true, mode: 0o700 });
  • 读取本地文件
    src/page.ts:571
    const realBase = await realpath(base).catch(() => {
  • 写入本地文件
    src/page.ts:581
    await mkdir(parent, { recursive: true, mode: 0o700 });
  • 读取本地文件
    src/page.ts:582
    const realParent = await realpath(parent).catch(() => {
  • 写入本地文件
    src/page.ts:590
    await writeFile(target, buffer, { flag: "wx", mode: 0o600 });
  • 读取本地文件
    src/page.ts:798
    await stat(file);
  • 写入本地文件
    src/page.ts:815
    await mkdir(directory, { recursive: true });
  • 读取本地文件
    src/page.ts:816
    const before = new Set(await readdir(directory).catch(() => []));
  • 读取本地文件
    src/state.ts:60
    const raw = await readFile(statePath(lane, dir), "utf8");
  • 写入本地文件
    src/state.ts:74
    await mkdir(dir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/state.ts:78
    await writeFile(tmp, payload, { encoding: "utf8", mode: 0o600 });
  • 写入本地文件
    src/state.ts:79
    await rename(tmp, file);
  • 写入本地文件
    src/state.ts:88
    await mkdir(dir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/state.ts:92
    await writeFile(lock, String(process.pid) + "\n" + Date.now() + "\n", { encoding: "utf8", flag: "wx", mode: 0o600 });
  • 读取本地文件
    src/state.ts:97
    const raw = await readFile(lock, "utf8");
  • 删除本地文件
    src/state.ts:100
    await unlink(lock).catch(() => {});
  • 删除本地文件
    src/state.ts:125
    await unlink(lock).catch(() => {});
扫描于 2026/11/3(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

用 TypeScript 写的原生 DSH browser_* 工具,基于零依赖 CDP 内核,能驱动任何已登录的 Chromium 系浏览器,并按任务给 harness 创建的标签页分组。

README

由 DeepSeek 最新模型翻译生成
dsh-browser-harness DeepSeek Harness(DSH)原生浏览器工具。 零依赖 CDP 内核 + 7 个 browser_* 工具,直连专用、已登录的 Chromium 内核浏览器,提供 e1/e2 引用快照,并按任务给自建标签页分组。 工具 browser_status 端点 / 浏览器版本 / 标签页 / 当前标签页 browser_navigate 打开 URL,返回页面信息 + 快照 browser_snapshot 紧凑引用(e1…),含角色、名称、视口中心坐标 browser_act click / type / fill / press / scroll browser_extract text / html / JS / network browser_screenshot PNG 路径 browser_tabs list / use / new / close 亮点
展开完整文档(README 剩余 1 节)
dsh-browser-harness

DeepSeek Harness(DSH)原生浏览器工具。 零依赖 CDP 内核 + 7 个 browser_* 工具,直连专用、已登录的 Chromium 内核浏览器,提供 e1/e2 引用快照,并按任务给自建标签页分组。

工具

browser_status 端点 / 浏览器版本 / 标签页 / 当前标签页 browser_navigate 打开 URL,返回页面信息 + 快照 browser_snapshot 紧凑引用(e1…),含角色、名称、视口中心坐标 browser_act click / type / fill / press / scroll browser_extract text / html / JS / network browser_screenshot PNG 路径 browser_tabs list / use / new / close

亮点

- 运行时零依赖 + 全量 TypeScript:构建产物只用 Node 内置的 fetch / WebSocket,不下载浏览器;源码、测试、脚本、扩展全部是 TypeScript,分别由 tsc 编译到 dist/、dist-tests/、dist-scripts/、extension/sw.js;插件入口仅用宿主提供的 @deepseek-ai/dsh-tools peer。
- 真实登录态:接自己起好的专用 Chromium 实例,登录一次长期有效;不碰日常浏览器。
- 文本优先:无障碍树 + ref 比「截图喂视觉模型」更准更省,截图只是补充。
- 按任务标签组:插件自建的标签页自动按 DSH 会话分组,工作标签页不受影响;headless 自动跳过。
- 可验证:141 单测(fake CDP)+ 27 集成场景(真实 headless/headful Chromium)= 168 条,CI 覆盖三平台。
- 收紧的边界:browser_tabs use 只接受 page + http(s)/about:blank(非自建页需精确 targetId);截图限定 screenshotDir 且不覆盖;fill 不回显输入值;JS 模式标非并发;工具输出对 token 类 URL/headers 尽力脱敏;宽泛端口回退改为显式 auto。

环境要求

| 要求 | 说明 |
| DSH | >=0.2.1-rc.5(不设上限) |
| Node | >=22 |
| 浏览器 | 任一 Chromium 内核 + remote debugging(默认 9331,见 配置) |
| 平台 | Windows / Linux 已验证;macOS 单测 CI 通过,真实 Chromium 端到端未实测 |

安装

插件发布于 GitHub Packages:@xumi0920/dsh-browser-harness(npmjs 同名包是别人的项目)。三种方式任选,详见 docs/install.md:

1. 插件页(推荐):DSH Web → 插件页 → 添加插件 → 安装第三方插件,支持 npm 包名 / Git 仓库 / 本地目录;或在「发现」标签页安装市场条目。
2. 一句话交给 DSH(创造模式会话):把 @xumi0920/dsh-browser-harness 安装到当前 profile。
3. 手动安装(GitHub Packages,classic PAT):

npm config set "@xumi0920:registry" "https://npm.pkg.github.com"
npm config set "//npm.pkg.github.com/:_authToken" "<YOUR_GITHUB_TOKEN>"
& "$env:LOCALAPPDATA\\Programs\\DeepSeek Harness\\resources\\runtime\\cli\\bin\\dsh.cmd"
plugin --profile desktop add "@xumi0920/dsh-browser-harness"
GitHub Packages npm registry 只支持 classic PAT(scope read:packages),不支持 fine-grained token。手动 npm config set 会把 token 持久化到 ~/.npmrc:建议优先用一键脚本(临时配置,装完即删);手动安装后请执行 npm config delete "//npm.pkg.github.com/:_authToken" 并撤销该 token。本地目录安装前先 npm install && npm run build;CLI 改 profile 前先退出 DSH。热插拔:application: applied 已生效,restart-required 才需重启(替换已安装包通常需要重启加载新的 JS 模块,原因见返回的 restartReason)。

快速开始

安装生效后,先启动专用 Chromium 浏览器(默认 9331),然后在任意 DSH 会话里让模型调用(所有预设可用,创造模式只影响 plugin_manager 安装):

browser_status → browser_navigate {url} → browser_snapshot → browser_act {action:"click", ref}
browser_extract {mode:"text" | "html" | "js" | "network"}

首调 connected:false?确认专用浏览器已启动且 http://127.0.0.1:9331/json/version 可访问(见 docs/configuration.md)。

适用场景

| 场景 | 建议 |
| 登录态页面、点击/填表、上传下载、多标签、截图 | 用本插件 |
| 公开页面纯读取 | 优先 web_fetch(更快,不占浏览器) |
| headless 环境 | 标签组自动跳过;其它工具正常 |
| 日常浏览器 | 不要指向它;使用专用 profile 实例 |

文档

| 文档 | 内容 |
| 安装与验证 | 插件页 / 一句话 / GitHub Packages / 本地 / Linux / 卸载 / 升级 / FAQ |
| 配置 | 浏览器发现、端口约定、registry、profile patch 配置键 |
| 按任务标签组 | 行为边界、配置、排查、实现方式 |
| 使用 | DSH 工作流、独立库、CLI |
| 架构 | 分层、关键流程、错误模型、安全边界 |
| 扩展与语言 | 原生 JS/TS 插件、热插拔/HMR、MCP 接 Python 等 |
| 仓库结构 | 目录约定、维护与发布流程 |
| 安全策略 | 漏洞私密报告、支持版本、数据处理说明 |

扩展与语言

- 原生插件:Node 22+ ESM 包(JS/TS,TS 需构建),bundle patch 注册,HMR 协调热插拔。
- 其它语言:写 MCP server(stdio / Streamable HTTP,Python / Go / Rust / Node 均可),profile 里加 @deepseek-ai/dsh-mcp-client,工具以 mcp__<serverName>__<tool> 暴露。
- 技能:Markdown(SKILL.md);UI 插件:JS/TS。细节见 docs/extending.md。

测试与 CI

npm install # 开发依赖(TypeScript),运行时零依赖
npm run test:all # 构建 + 141 单测 + 27 集成场景 = 168 条

CI:单测跑 ubuntu / windows / macOS(另有 Node 24 任务);集成场景跑 ubuntu + xvfb(门禁 27 条,S15/S16 必须实跑)。测试与脚本同样由 tsc 编译(dist-tests/ / dist-scripts/),与运行时源码共用 NodeNext 配置。

安全边界

- 只关闭本 harness 创建的标签页;force 关闭需要用户明确同意。
- browser_tabs use 只接受 page target + http(s)/about:blank;非自建页必须精确 targetId,URL 子串只匹配自建页;file:/chrome:/扩展 worker 会被拒绝。
- 截图只写 screenshotDir(默认 <stateDir>/screenshots),拒绝目录外路径、symlink 逃逸和覆盖已有文件。
- browser_act fill 只返回 {ok, length, verified},不回显输入;JS 模式可修改页面状态,已标非并发。
- Cookie 默认脱敏;network URL/headers、status/tabs URL 对 token 类字段尽力脱敏:查询参数名按驼峰/下划线/连字符归一化匹配,Location / Content-Location 整值脱敏。页面正文、HTML、截图仍可能含敏感数据,不要把工具输出当完整 DLP。
- browser_status 的端点诊断不返回完整 CDP URL;连接错误只保留稳定错误码和安全提示。
- 状态文件只保存去掉 query/fragment 与 userinfo 的 URL;宽泛 CDP 端口回退需显式 browser: "auto" / BH_ALLOW_FALLBACK=1。
- 不要把 cdpUrl 指向日常浏览器;全部后台操作,不抢前台;遇到登录墙停手问人。

许可

MIT © 2026 Xumi0920 · 当前版本 v1.0.5 · 全量 TypeScript(源码/测试/脚本/扩展)· 更新日志见 Releases
预览分享卡片长什么样 ↓Xumi0920/dsh-browser-harness
分享 · DeepSeek Harness Hub
Xumi0920/dsh-browser-harness

直连已登录浏览器,按任务分组标签页并抓取页面内容

这是你的仓库?认领条目

回到顶部