dsh-moli-browser
Gives DSH the full 33-tool browser surface (ctx.browser seam -> a self-hosted headless moli browser over CDP: one 127.0.0.1 daemon with Bearer-token auth, request-path whitelist and WebSocket rewriting, no root/GUI/Electron needed; single-engine moli serve with auto LD_LIBRARY_PATH/FONTCONFIG_FILE i
Install
dsh plugin --profile web add dsh-moli-browser
Sandbox test
This plugin has not been tested yet. Submit a test →
README
dsh-moli-browser

给 DSH 一个能跑在无 root、无 GUI 容器里的浏览器。 一个包、一条 dsh plugin add 装完即用:单例 CDP 守护进程(内核 = moli,只绑回环、带 Bearer token 门)+ 完整的 33 个 browser_* 工具面 + ctx.browser 接缝的 cdp-daemon provider + 一个网页浮动窗口(实时画面可点可打字)+ 两份随包全局技能。不需要 Electron、不需要 GUI 库、不需要 root、没有构建步骤。
English TL;DR — A single-package browser backend for DSH. One tarball ships a singleton CDP daemon (engine: moli, bound to loopback behind a Bearer-token proxy), the full 33-toolbrowser_*surface, thectx.browserseam providercdp-daemon, an in-page floating panel (live interactive view + logs + appearance settings) and two bundled global skills. No root, no GUI libraries, no Electron, no build step. Platform: x86_64 Linux (glibc) only.
```bash
dsh plugin --profile web add dsh-moli-browser@latest # then restart DSH
```
界面预览
一处入口,一个窗口。 装完插件、重启一次 DSH,页面左上角就多出一枚小胶囊(贴哪个角、偏多少都能改,也可以直接拖到任意位置)。点开就是浏览器窗口:左边一竖排入口(网页 / 操作 / 控制台 / 网络 / 设置),中间是能点、能滚、能打字的实时画面,右下角能拖宽窄,标题栏能拖、双击能最大化。
实时画面(默认入口):能点、能滚、能打字 · 在真 DSH 界面里:居中、贴合画面比例、没有黑边
设置区:分辨率、顶部留白、胶囊偏移、窗口外观 · 网络日志:手动清理 + 自动清理上限 · 收起后的胶囊:位置与外观都跟随设置
<details>
<summary>为什么大屏页面也能看清(0.8.2 修掉的「画面糊」)</summary>
<br>
取帧曾经漏发 maxh,被服务端当成 0 夹到下限 240,于是 1920×1080 的页面被等比压进 max×240 的小框、再被界面放大。0.8.2 起:缺字段沿用当前值、最大边同时封顶宽高、大屏页面按原尺寸下发。
</details>
目录
- [这是什么 / 它解决什么问题](#这是什么--它解决什么问题) | [安装](#安装) | [快速开始](#快速开始起守护进程)
- [CLI 参考](#cli-参考browsersvc) | [工具参考](#工具参考33-个-browser_) | [网页面板与实时窗口](#网页面板与实时窗口)
- [随包技能](#随包技能技能中心里显示系统内置) | [配置](#配置) | [观测与状态文件](#观测与状态文件)
- [环境要求与兼容性](#环境要求与兼容性) | [FAQ](#faq) | [更新记录](#更新记录) | [文档](#文档)
这是什么 / 它解决什么问题
现状问题 · 本项目的做法
DSH 内置 dsh-builtin-browser 的 provider 是自托管 Electron:没有 Electron 二进制、没有 GUI 库、seccomp 下 No usable sandbox! · 用 moli(静态 Linux 二进制,自带排版与资源管线),--layout --resource,库/字体指向用户态目录,不需要 root
每个消费方各起一个浏览器(内存重复) · 一个守护进程,多客户端通过 CDP 连入,会话用隔离 BrowserContext 分开
CDP 端口若对外监听 = 把浏览器(含 cookie)交给主机上任意进程 · 内核只绑 127.0.0.1:<内部随机端口>,对外只暴露本机回环代理(要求 Bearer token,只放行读元数据与 /devtools);代理顺带精确统计连接数
dsh-univer-office 只接受「浏览器可执行文件路径」,无法连远端 CDP · univer 用它自己的包装脚本起临时实例(它没有 connectOverCDP 能力),与本包守护进程互不影响
安装
# 一条命令(推荐;可重复执行) dsh plugin --profile web add dsh-moli-browser@latest # 钉版本 / 离线分发(同一个包):Release 资产或本地 tarball # dsh plugin --profile web add https://github.com/lyp88997/dsh-moli-browser/releases/download/v1.0.1/dsh-moli-browser-1.0.1.tgz # dsh plugin --profile web add ./dsh-moli-browser-1.0.1.tgz # 然后重启 DSH(插件在 boot 时 import,热重载不可靠),再校验组合: dsh --profile web --dump-config | grep -E 'browserProvider|# == dsh-moli-browser|not found'
期望看到 browserProvider: cdp-daemon、# == dsh-moli-browser 层;browser-electron / playwright-browser 两条守卫行会打印 not found(只装本包时这两个 id 不存在,无害)。
装完这一个包就有什么
- **33 个
browser_*工具**(id: tool-browser):工具面与接缝来自本包依赖dsh-builtin-browser,经本包./browser/./tool-browser转出口暴露(plugin/shims/)。 cdp-daemonprovider:接到自建守护进程,首次用浏览器时用本包自带的bin/browsersvc.mjs start自动拉起。- 网页浮动窗口:实时画面(可点/滚/打字/地址栏)、操作/控制台/网络日志、窗口外观与设置。
- 两份随包技能:
browser、browser-runtime,由插件注册的内置技能提供者提供,技能中心里显示「系统内置」。
三条不要做的事
- 不要再单独装
dsh-builtin-browser:它若同时是组合包,browser/tool-browser两个 id 会被插两次、33 个工具重名挂两遍。已装过就先dsh plugin --profile <name> remove dsh-builtin-browser。 - 不要与旧包
dsh-browser-service同时装:两包共用browsersvcCLI 名与/browser-service/*面板路由,同装必撞(pnpm 会警告 bin 冲突)。装本插件前先dsh plugin --profile <name> remove dsh-browser-service并重启 DSH。 - 不要用旧名
dsh-browser-moli当裸包名(前身子包的名字):npm 上的dsh-browser-moli是别人的同名包(drscrewdriver),写了就装到别人家。本包是dsh-moli-browser,当前版本 1.0.1(1.0.1 = moli 单发动机重写首版)。 - 不要与手写 patch 同时用:bundle patch 与手写
profiles/<name>/cordis.patch.yml的insert行会重复(写法见docs/profile-patch.browser-service.yml,只在改源码时临时用)。
组合(plugin/cordis.patch.yml)自动做四件事:插入接缝 browser(选 cdp-daemon)、插入 tool-browser、插入 browser-moli provider、关掉内置 browser-electron 与 dsh-playwright-browser(后者自带 10 个与内置同名的 browser_* 工具,两个 provider 的工具面不能共存)。
不需要配置 autoStartCommand:端点不通时插件默认用本包自带的 bin/browsersvc.mjs start 拉起一次(plugin/lib/provider.js 的 defaultAutoStartCommand())。想换端口/内核,再在 profile 的 cordis.patch.yml 里覆盖(patch 是整行替换 config,要重述 cdpUrl):
- id: browser-moli
config:
cdpUrl: http://127.0.0.1:9333
autoStartCommand: node /home/you/dsh-moli-browser/bin/browsersvc.mjs start --port=9333
browsersvc 默认空闲 15 分钟自杀(--idle-ms,上限 24 小时);插件自启时默认用 5 分钟(配置键 idleMs)。最后一个会话关闭后插件会主动断开 CDP 连接(P1),守护进程才可能真的空闲退出;下一次调用浏览器会自动把它拉回来(F25,见 CHANGELOG)。
⚠️ 改完必须重启 DSH(插件在 boot 时 import,热重载不可靠):运行中的完整 web profile 上 patchReload: live 会静默回滚(进
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::1,最后更新 2026-10-05