dsh-huoqu:在 DSH 里把网页渲染结果保存为离线 HTML 与 MHTML

前言

在 DeepSeek Harness 里做联网相关任务时,常见需求是保留「当时页面上已经渲染出来的样子」,而不是只存 URL 或一段 Markdown 摘要。浏览器另存为、截图或手写爬虫,要么丢交互上下文,要么难以和当前会话、工作区权限对齐。

下面介绍社区插件 huoqu(仓库 yueyexiayu/dsh-huoqu),由维护者 yueyexiayu 发布,分类为 联网工具。它在 Harness 内采集当前渲染结果,写入本地可离线打开的静态副本,并附带校验报告。

这是什么

huoqu 是 DSH desktop 插件:对指定 URL 做页面采集,输出本地 HTML、MHTML 及资源目录,供离线预览与归档。当前插件版本为 0.2.2(以侧栏 GET 返回的 version、采集结果中的 pluginVersion 为准)。

插件通过现有 sandboxPolicy 与 fs 服务做写入与清理,不需要修改 DSH 官方源码。DeepSeek Harness 生态强调「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

采集后端与身份

  • purpose:capture(默认)、automation、web-regression。普通采集默认走 Chrome 扩展(dsh-chrome),复用当前正式 Chrome 的登录状态,并为本任务创建独占的后台 capture target,不另开调试端口、不接管用户已有标签。
  • backend:auto(默认)、current-chrome、headless。auto 按用途与身份选择后端,不凭异常猜测。
  • browser_identity:普通 capture 默认 current;自动化与 Web 回归默认 anonymous,使用自有 headless,不借用用户 Chrome。扩展缺失或不可用时明确失败,不再悄悄变成匿名访问(兼容性变化见 README)。

无头场景固定依赖本插件安装的 playwright-core@1.58.2 对应 chromium-headless-shell(revision 1208),不扫描其他项目缓存、不回退系统 Chrome。README 写明:目前仅 macOS arm64 有完整固定校验;Linux / Windows 等为 unsupported/unverified。

产物

本地入口为 index.html,资源在 assets/;另有单文件 index.mhtml,以及 source.png、local.png、report.json、manifest.json。

离线 HTML 与 MHTML 会移除脚本与主动跳转,并加限制性 CSP;不会复制原站 API、登录态、脚本或交互功能。采集会滚动页面以加载懒加载内容,但不自动点击通用按钮;需点击或接口才出现的内容可能缺失。

只有资源完整、离线预览与内容检查通过、浏览器清理成功,结果才标为 completed;已保存但检查未通过为 partial,原因在 report.json。

DSH 侧栏与权限

启用后侧栏出现 「网页获取」。任务绑定创建时的 loaded Session;列表、状态、取消、打开本地文件均按 sessionId 隔离,跨会话请求返回 404。

  • read-only:拒绝采集。
  • workspace-write:仅允许规范化工作区、/tmp 与平台临时目录;默认输出 ~/Downloads/huoqu/ 在此策略下会被拒绝,应改到工作区或临时目录。
  • danger-full-access:不限制写入位置。

侧栏任务串行,最多 4 个运行或排队;终态任务最多保留 1 小时、最多 40 条。所有 HTTP 操作须带有效 sessionId,缺失或畸形返回 400。

安装与启用

官方 README 未提供 dsh plugin add 一类命令,安装方式为复制目录并在 desktop profile 中插入插件入口。

1、将插件复制到 Harness 插件目录:

$DSH_HOME/plugins/huoqu

2、在 $DSH_HOME/profiles/desktop/cordis.patch.yml 写入:

- insert:
    - id: huoqu
      name: ../../plugins/huoqu/lib/index.js

3、完全退出 DeepSeek Harness(macOS:⌘Q),再打开并建立新会话。Host 修改与新工具 schema 需重启/新会话才能加载;仅保存源码不会更新正在运行的 Host。

若使用 headless 后端,需在本插件目录安装固定浏览器(README 示例):

/usr/local/bin/node /usr/local/lib/node_modules/npm/bin/npm-cli.js ci --ignore-scripts
PLAYWRIGHT_BROWSERS_PATH=0 /usr/local/bin/node node_modules/playwright-core/cli.js install chromium-headless-shell

也可执行 npm run install:headless(使用 Playwright 默认缓存路径,语义与 PLAYWRIGHT_BROWSERS_PATH=0 不同,见 README)。

安装前请自行阅读仓库源码与许可证;插件以当前 DSH 进程权限运行,输出目录与网络访问均受会话文件策略约束。

典型用法

侧栏采集

在新会话中打开侧栏「网页获取」,输入 URL 并选择输出目录(须符合当前会话文件策略),提交后等待任务完成,再通过侧栏打开本地副本或查看报告。

程序化调用示例

README 给出的 JSON 输入示例(Web 回归、匿名 headless):

{"url":"https://example.com/","purpose":"web-regression","browser_identity":"anonymous","backend":"headless","output_dir":"/tmp/new-capture"}

Node 直接调用 capturePage(input, signal, access, {cwd, scope:{sessionId,taskId}}) 时必须显式提供运行归属(cwd 与 scope),请求 wire 不能伪造 scope/cwd/ownership。

普通 purpose=capture 且默认身份 current 时,需配套 Chrome 扩展提供 openCaptureSession;无扩展时默认 current 场景会明确失败。

适用场景与注意

适合:需要把「某一时刻已渲染页面」归档到本地、与 DSH 会话权限一致地写入工作区或临时目录;需要 MHTML 单文件副本或带 report.json 的 partial/completed 判定。

不适合或需知限制:

  • 期望离线副本仍具备原站登录后动态交互或私有 API 行为。
  • 依赖大量「必须点击才出现」的内容,且未在采集前自行处理。
  • 非 macOS arm64 上依赖 README 描述的固定 headless 校验路径时,需接受 unsupported/unverified 说明,并按文档自行验证。

输出目录必须为空,或能通过 manifest.json、report.json 确认是既有 huoqu 副本;无法确认归属时拒绝覆盖。

结尾

huoqu 把「网页当前渲染结果 → 本地离线 HTML/MHTML」收进 DSH 插件与侧栏任务模型,并区分 Chrome 扩展采集与固定 headless、会话级文件策略。若要在 Harness 里做可归档的页面快照,可从目录页与仓库 README 对照版本 0.2.2 安装验证。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye