DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

x102201 /

x102201/dsh-helper-plugin-workspace-browser

Verified

DSH 插件:为当前工作区单独启动一个 Chrome,在右侧栏看画面,并用 workspace_browser_* 让模型阅读和操作页面。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: master@07f83741

dsh-helper-plugin-workspace-browser

工作区浏览器:胶囊菜单和右侧实时画面

DSH 插件。给当前工作区单独开一个带调试端口的 Chrome:你在右侧栏看画面,模型用 workspace_browser_* 阅读和操作页面。

它不接管你日常使用的那个浏览器,也不安装扩展。每个工作区有自己的登录态。本机需要已经装好 Chrome;插件不会代为下载浏览器。

实现细节、接口和实测记录在 DESIGN.zh.md。

适合拿它做什么

  • 打开一个网页,让模型读正文并总结。总结由模型写,插件只把页面文字交出去。
  • 按页面上的控件完成点击、填字、翻页。控件用当次快照的编号指认,不靠截图认字。
  • 把已经跑通的步骤存成技能,下次从输入框再调出来。

不适合拿它做的事:操作你已经登录的日常浏览器;让模型自己写页面脚本或点击坐标。

和扩展类插件的差别

扩展路线(例如 dsh-browser-control)连的是你正在用的浏览器。本插件另起一个 Chrome 进程。

扩展路线 本插件
和浏览器的关系 扩展加调试桥 无扩展,直连调试端口
准备 安装扩展 点胶囊里的「启动」
登录态 日常浏览器里已有的 这个工作区自己的 profile,站点要再登一次
你看到的画面 以文本快照为主 右侧栏实时画面
工具名 browser_* workspace_browser_*,可以和扩展同时装

安装

需要 Node.js 20 或更高,以及本机的 Chrome。两条命令都会改当前 web profile 的 package.json(依赖和 dsh.profile.bundles)。装完后重启 dsh --profile web(或 dsh web)。bundle 列表只在启动时读一次。

通过 GitHub 安装(推荐)

不用先克隆仓库。github: 协议把 这个仓库 装进 profile。

dsh plugin --profile web add github:x102201/dsh-helper-plugin-workspace-browser

通过 link 协议安装

本机已经有一份源码、要跟着改的时候用。link: 把 profile 的 node_modules 指到这个目录,改完重启就用到这份文件。路径必须是绝对路径。Windows 上权限不够时用 junction。

dsh plugin --profile web add link:/absolute/path/to/dsh-helper-plugin-workspace-browser

两件容易撞上的事:

  • duplicate loader entry id:本包的 cordis.patch.yml 已经插入了 id: workspace-browser。profile 自己的 patch 里如果再插同一个 id,启动会失败。删掉其中一处。
  • 工具重名:同名工具会让加载直接失败。本插件用 workspace_browser_*,和 browser_* 不冲突。不要把同一份插件装两次。

打开这个工作区的浏览器

点输入框旁边的胶囊,只打开小面板,不会马上启动 Chrome。点「启动」之后窗口出现,右侧栏展开画面。

关掉浏览器窗口后,大约半秒内胶囊回到「未启动」,不会自己再打开。再点「启动」会重新起来。判断「运行中」靠的是调试通道能连上并且能列出标签,不是 endpoint.json 还在不在。

没找到 Chrome、版本过低、或找到多个候选时,小面板会写出原因,并给出下载、指定 chrome.exe 或重新检测。指定路径在插件面板里本插件的配置区。

把一句话交给模型

在输入框使用 /browser。没注册过的 /命令 会被 DSH 直接拒绝,不会当成普通文字。

你输入 插件先做的事 模型接着看到
/browser 启动窗口并打开画面 没有新消息
/browser https://… 已有相同网址就用那张标签,否则后台新开 网址和标签 id
/browser https://… 后面的话 同上 再加上这段话
/browser 一段没有网址的话 打开窗口和画面,不开新标签 整段话,由模型决定去哪
/browser --new https://… 即使已有相同网址也再开一张 同有网址的一行

--new 后面必须有网址,否则只返回错误,不启动。

交给模型的是一枚芯片:气泡上只显示短标签,悬停或真正送进模型时才展开。展开说明会要求只用 workspace_browser_*,不要改用 DSH 自带的网页抓取,也不要调用 browser_*。

已经打开的标签也可以从胶片条「加入对话」,效果和上面一样:先放进输入框,由你发送。

把重复步骤存成技能

技能记的是做法(自然语言,可以写 {{参数}}),不记某一次页面上的编号。文件在 <workspace>/.workspace-browser/skills/<名字>.md。这不是 DSH 宿主的 .dsh/skills/。直接对模型说「保存成 skill」会走到宿主那边。

在输入框里发起:

  • /browser 新增技能 或 /browser 新增skill
  • /browser 保存技能 或 /browser 保存skill
  • /browser 修改技能 或 /browser 修改skill

后面可以再带名字。这些字只是线索。模型会先复述它理解的意图和步骤,你同意之后才写入。修改是用同一个名字覆盖。

胶片条下面是技能名字,横排,放不下就换行。鼠标停在名字上会变色。右键可以:

  • 加入对话:把名字放进输入框,不自动发送
  • 查看:在侧边栏打开这个技能文件
  • 在文件资源管理器中显示:在系统文件管理器里选中它
  • 删除:删掉这个技能文件

输入框打 @ 也能选技能。发出去之后模型才看到全文。评论、发送默认先停下来等你确认,除非技能里写明不用确认。

鼠标停在「Skill」上,能看到同样的用法。胶片条和技能区之间的分隔条可以拖,高度会记住。

在右侧栏看页面

默认是上下两块:上面是当前焦点页,下面是这个窗口里各标签的缩略图(胶片条)。中间的分隔条可拖。

点缩略图只改你正在看哪一张,不把真实窗口带到前台。要看真实窗口,用悬停菜单里的「切到前台」。这是唯一会抢系统焦点的画面操作。

缩略图上有三处标记,颜色和形状同时使用:

标记 含义
整张图的外框 正在主画面里显示
图片下方的短横 那个窗口里最顶层的标签
左上角圆点 绿:调试通道已接管;灰:还没接管

窗口最小化、所有标签都不可见时,短横会沿用上一次的结果,提示里会写明是推断。

只有这块画面真的看得见时才接收画面流。切走之后停止推送,避免对着没人看的面板空转。

模型能做的操作

工具在插件加载时就注册,不随浏览器启停增减。浏览器没起来时,调用会返回带说明的错误,模型可以原样告诉你。

工具
读 snapshot、get_text、list_tabs、select_tab、screenshot
写 click、type、press、scroll、navigate、open_tab、close_tab、back、forward、reload、wait
保存技能 save_skill(要你先在对话里确认)
默认没有 evaluate

名字都带前缀 workspace_browser_。

snapshot 先给可见正文,再给可操作控件的编号(e1、e2)。编号只对这一份快照有效。点击和填字用这些编号,不用 CSS,也不用坐标。操作之后会再给一份快照。正文为空(内部页、PDF、还在加载)会说明原因,不当作成功。

get_text 优先取 main 或 article。密码和名字敏感的字段只给占位符。页面上的文字都包在不可信标记里,模型不应把它们当成给你的指令。

截图给人看,也给 screenshot 工具落盘。认按钮、读正文不走截图。

写操作直接执行,不再询问。

正文和点击使用 playwright-core,连到已经启动的那个 Chrome。第一次读写页面时,如果本机还没有这个库,会装到 <DSH_HOME>/workspace-browser/vendor/,版本钉在 1.55.1,不会再下载一份浏览器。装不上时读写工具返回 playwright-missing,胶囊和画面仍可用。进程、标签、画面和截图仍走 Chrome 调试协议。

数据放在哪

<workspace>/.workspace-browser/
├── .gitignore
├── chrome-profile/     # 这个工作区的登录态
├── skills/             # 技能说明
├── shots/              # 截图
└── endpoint.json       # 端口线索,不代表浏览器还活着

目录名以点开头,并在 Windows 上设了隐藏属性。目录里的 .gitignore 内容是 *。工作区已经有 .gitignore 时,会追加一行 .workspace-browser/,没有这个文件就不代为创建。

没有工作区的会话用 <DSH_HOME>/workspace-browser/_ungrouped/。换一个工作区就是另一套 profile,站点要重新登录。

配置

侧边栏「插件」→「已安装」里的 dsh-helper-plugin-workspace-browser 卡片,配置区在描述和「包含的组件」之间。

namespace 是这一行的 Loader row id workspace-browser(cordis.patch.yml);保存写进 profile 的 cordis.patch.yml 用户层,不是 settings.yaml。

键 默认 说明
capsuleEnabled 开 输入框那一行的胶囊
capsuleShowPort 开 胶囊文案里带端口
panelAutoOpenOnLaunch 开 启动成功后展开画面
panelTileSplit 0.55 焦点区高度占比,拖分隔条会写回
panelSkillHeight 72 技能区高度(像素,40–360),拖胶片条下方的分隔条会写回
panelFollowFrontTab 关 焦点是否跟随窗口里最顶层的标签
streamFocusFps / streamFocusMaxWidth / streamFocusQuality 2 / 960 / 70 主画面。质量是 1–100 的整数
streamThumbFps / streamThumbMaxWidth / streamThumbQuality 0.25 / 160 / 50 缩略图。帧率 0 表示不要缩略图
userDataDir 空 留空用工作区自己的目录。填了就用这份已经登录过的用户数据目录
debugPort 0 0 为自动分配。填了就连接这个端口;端口上已有窗口就直接用
chromeCrossOrigin 关 打开后加上关闭站点隔离的启动参数,并重启实例
instanceOnDshExit keep keep 留下本插件启动的浏览器,close 随 DSH 退出关掉。接到已有调试窗口时不关

画面、胶囊相关的项在点保存后马上生效。用户数据目录、调试端口、跨域和退出行为在下次启动这个浏览器时生效。

配置页里如果看不到本插件,两边都要在:宿主那一行导出 Config(0.2 的 settings 服务据此描述 namespace),浏览器半边把页面注册进插件面板的 plugins.bundle.config(键 = 包名)。少一边,配置区就是空的。挂载成功时浏览器控制台有一行 注册插件页面。

给改代码的人

宿主半边是 index.js,浏览器半边是 client.js(ModuleLoader 工厂,不用 ESM import)。页面读写在 lib/page-driver.js,调试协议客户端在 lib/cdp.js。

控制面前缀是 /dsh-helper-plugin-workspace-browser。常用的有 GET /status(不启动进程)、POST /launch、POST /stop、GET /skills、POST /skills/locate。画面 WebSocket 在同一前缀的 /stream,只接受回环地址。完整表、帧格式和 CDP 约定在设计说明第 7 节。

npm test                 # 编码检查和单元测试,不启动 Chrome
npm run verify:p0        # 真机:启动、停止、假端点、强杀进程
npm run verify:live      # 真机:读、写、画面

verify:* 会打开一个 Chrome 窗口,结束时自己收尾。

许可证

MIT

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout
—/ 5

No ratings yet

Verified DSH bundle

Commit 07f837416a2b

Community comments

No comments yet. Be the first to write one.