前言¶
在 DSH 里让智能体操作本机已登录浏览器,常见路径是调用 opencli。每次执行都会再起一次 Node 进程、加载大量模块,只为向本机 daemon 发一条请求;README 中给出的实测是单次约 1.4–1.8 s(例如 opencli list search 约 1071 ms)。Agent 连续多步调用时,这部分时间会叠在任务链路上。
dsh-opencli 由维护者 d342784178 发布,分类属于客户端类 DSH 插件。它不替你在 shell 里反复敲 opencli,而是在 harness 侧通过 HTTP 直连本机已运行的 OpenCLI daemon,把「每条命令一次 CLI 冷启动」换成「常驻服务 + 短请求」。社区目录页见 SkillHub,源码与文档在 GitHub。npm 包名同为 dsh-opencli,当前 package.json 标注版本 0.1.0,许可证 MIT。DSH 社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系;生态上 DSH 强调「一切皆插件」,本插件是其中一条可选 bundle。
下面介绍它做什么、怎么装、怎么用,以及和真实浏览器交互时要注意的事。
这是什么¶
一句话:dsh-opencli 是面向 DeepSeek Harness 的低延迟浏览器工具集,直接驱动本机 OpenCLI daemon,而不是每步都 spawn 一次 opencli CLI。
README 用两条路径对比延迟:
CLI path : agent -> shell -> node opencli -> (318 modules) -> daemon ~1400-1800 ms
plugin path : agent -> oc_exec -> fetch() -> daemon ~10-20 ms
实现上,插件向 http://127.0.0.1:19825/command 发请求,并带上 X-OpenCLI: 1 头,把 daemon 的响应交回 agent。daemon 预热后,同类请求 README 称约 5–20 ms。
核心功能¶
插件通过 cordis.patch.yml 注册五个工具(无需手写 patch 条目)。下表含义来自官方 README。
| 工具 | 作用 | 是否写页面 |
|---|---|---|
oc_status |
daemon 版本、在线状态、扩展连接、contextId、profiles、内存;出问题时先调它 | 否 |
oc_exec |
在已登录浏览器里执行 JS 表达式;codes 一次最多 40 条;支持 await fetch(...) 等异步 |
视表达式而定 |
oc_navigate |
打开 URL,等待加载,返回标题 / 最终 URL / 是否超时 | 是 |
oc_snapshot |
把页面压成紧凑可交互结构(标题、带 href 的链接、按钮、输入框 name/placeholder、disabled 等),比 outerHTML 便宜一个数量级 |
否 |
oc_tabs |
在自动化容器内 list / new / select / close 标签页 |
new/select/close 会改状态 |
session 是持久自动化标签页的键(默认 dsh),不同任务可以用不同 session 隔离标签。每次 oc_tabs 操作都要带 session(缺省则用配置的默认 session)。
失败不会抛未捕获异常,而是结构化返回:{ ok: false, errorCode, error, hint },hint 指向建议的下一步。daemon 死掉时插件不会自动重启,避免真实故障被静默重试掩盖。
配置¶
可在 profile patch 或插件设置 UI 覆盖 cordis.patch.yml 中的三项:
config:
port: 19825 # 须与 `opencli daemon status` 一致
defaultSession: dsh # 持久自动化标签页的 session 键
timeoutMs: 30000 # 单条表达式超时,限制在 2000–120000
安装与启用¶
包已发布到 npm(registry:https://registry.npmjs.org/dsh-opencli;当前版本可用 npm view dsh-opencli version 查询)。Node 引擎要求 >=20。
路径 A:在 DSH 内由插件管理器从 registry 解析(会一并处理 bundle 选中)
plugin_manager action=install_bundle target=dsh-opencli
从本地目录安装时:plugin_manager action=install_bundle target=/absolute/path/to/dsh-opencli。
路径 B:用 dsh CLI(实质是在 profile 目录里走 pnpm)
npx @deepseek-ai/dsh plugin --profile web add dsh-opencli
也可先全局安装:npm i -g @deepseek-ai/dsh,再执行带 plugin 的子命令。web 是桌面端默认 profile 名。
路径 C:在 profile 目录手动加依赖
cd ~/.dsh/profiles/web
pnpm add dsh-opencli
桌面创建的 profile 常带 pnpm .npmrc(node-linker=hoisted),优先用 pnpm add;无 pnpm 配置的 profile 也可用 npm install dsh-opencli。镜像环境可在命令后加 --registry=https://registry.npmmirror.com。
路径 B、C 只安装 npm 包,不会自动改 dsh.profile.bundles,harness 不会加载插件,直到你在侧栏 Plugins 页启用该 bundle(该页可同时完成安装与选中),或在 preset 允许时用 plugin_manager 启用。路径 A 会替你完成 bundle 注册这一步。
手动写入 profile 的 package.json 示例:
{
"dsh": {
"profile": {
"bundles": ["...", "dsh-opencli"]
}
}
}
插件自带的 cordis.patch.yml 会插入 dsh-opencli 工具行,不必手写。无论哪条路径,装完后应重启会话,或在插件列表里把 include:dsh-opencli 关一次再开。
注意:profile 的 lockfile 与 pnpm 版本要对齐(v9 lockfile 需要 pnpm 10+);版本不匹配时可能出现 lockfile 被忽略并整包重解析。用 B/C 安装时,尽量与 profile 现有 lockfile 使用同一 major 的 pnpm。
典型用法与排障¶
- 会话里先调用
oc_status,确认 daemon 在线、扩展已连接。 - 需要新标签时在容器内
oc_tabsop=new,再select;只对自动化容器内的页操作。 - 用
oc_navigate打开目标 URL,用oc_snapshot看清 DOM 结构,再用oc_exec执行表达式;复杂页面优先 snapshot,减少盲目写选择器。 - 多步脚本可把多条表达式放进
oc_exec的codes,一次往返最多 40 条。
常见症状与 README 建议:
| 现象 | 处理 |
|---|---|
daemon_unreachable |
执行 opencli daemon restart(任意 opencli 命令也会尝试拉起 daemon) |
extension ... disconnected |
在 Chrome/Edge 打开 OpenCLI 扩展,保持浏览器窗口存活,再用 opencli daemon status 看 extensionConnected |
Page is not in the automation container |
先用 oc_tabs op=new 在容器内开页 |
page_not_found / stale page identity |
oc_tabs op=list 核对 index/page,或省略 page 让 daemon 选择 |
ReferenceError / SyntaxError |
表达式本身有误;先 oc_snapshot 对照真实 DOM |
开发 index.js 时修改不会热重载,需通过插件管理器关闭再打开条目重新 import:
plugin_manager action=list_plugins
plugin_manager action=set_plugin target=include:dsh-opencli enabled=false
plugin_manager action=set_plugin target=include:dsh-opencli enabled=true
适用场景与注意¶
适合: 智能体需要在你已登录的真实浏览器里连续操作——填表、点按钮、跨步保留 cookie/session,且希望把 OpenCLI 调用延迟从秒级压到毫秒级时,用 oc_* 比反复 shell 调 opencli 更合适。
不适合或需慎用: 简单、无需登录态的页面探测,README 建议仍用无头 Playwright。oc_* 驱动的是真实浏览器窗口:点击、填表、关标签都会发生在当前可见会话里,权限与你在本机登录的账号一致。
插件以当前 DSH 进程权限运行;安装前请自行查看 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全与合规要求。
结尾¶
dsh-opencli 把本机 OpenCLI daemon 当作常驻服务,用五个 harness 工具替代「每条命令启动一次 opencli CLI」的路径,在官方 README 给出的测量下,延迟从约 1.4–1.8 s 量级降到约 10–20 ms 量级。安装任选 registry / CLI / profile 依赖三条路径之一,并记得启用 bundle 后重启或切换插件条目。
- 目录页:https://www.skillhub.cn/plugins/d342784178/dsh-opencli
- GitHub:https://github.com/d342784178/dsh-opencli
- npm:https://www.npmjs.com/package/dsh-opencli