dsh-chrome-attach
Verifieddsh-chrome-attach · v0.2.8 · MIT · Web UI
Attach the current Chrome tab to a DeepSeek Harness draft: one pick screenshots the page (degrading to a macOS window shot) and writes its title + URL as one text line.
Install
dsh plugin add dsh-chrome-attach Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-chrome-attach
English · DeepSeek Harness 插件

把当前 Chrome 标签页变成对话里的图片附件——ChatGPT 里「+ → attach 浏览器」的那个动作:截图、进草稿,同时把页面的 标题和地址写成一行文本,可继续打字,回车才发送。这样模型不只知道页面长什么样,还知道它是什么页面。
插件按能力自动降级,没有 dsh-chrome-bridge、没有 DSH Bridge 扩展也能用,只是截图质量不同:
| 通道 | 截图内容 | 需要什么 | 备注 |
|---|---|---|---|
bridge |
纯网页(无标签栏/地址栏) | 安装 dsh-chrome-bridge + DSH Bridge 扩展 |
体验最好:不抢焦点、不弹授权、支持整页 |
cdp |
纯网页 | Chrome 自带「Remote debugging」开关 | 一次授权,保留登录态和扩展 |
window |
整个 Chrome 窗口(含标签栏、地址栏、侧栏) | macOS + 屏幕录制权限 | 不需要扩展;会短暂把 Chrome 切到前台再切回 |
默认按 bridge → cdp → window 依次尝试,第一个成功的就用它;返回里带 source,窗口截图会在提示里标「窗口截图,含浏览器界面」。
安装
需要带 commandUi 与会话槽位 inputActions 的 DSH 版本(页面行靠它写入)。更老的版本截图照常、只是不写这一行,提示里会说。
从 npm 安装
dsh plugin --profile desktop add dsh-chrome-attach # web 版 profile 写 web
然后刷新窗口(Cmd+R)或重启 DSH。新 bundle 不热加载。
用 Release 里的 tgz
- 从 Releases 下载
dsh-chrome-attach-<版本>.tgz; - DSH 插件页 → 添加插件 → 粘贴这个 tgz 的绝对路径;
- 刷新窗口(Cmd+R)或重启 DSH。新 bundle 不热加载。
从源码安装(开发用)
git clone https://github.com/deqingLv/dsh-chrome-attach.git
在插件页添加目录的绝对路径(link: 安装,改代码重启即生效):
/Users/you/WorkSpace/Github/dsh-chrome-attach
使用
输入框左下的 + 展开列表里多一行,紧挨在「添加文件」下面、「添加」组内:
[Chrome 彩色标志] 附加 Chrome · attach —— 截图当前页面,附带标题和地址
点它就会截当前活动标签页(或降级为窗口),图片进当前会话草稿,不自动发送,可以继续打字。也可以直接输入 /attach 回车。
图片本身不携带页面信息——模型只看得到像素,不知道这是哪个网址。所以这一行同时会通过输入框自己的 inputActions 门面向草稿里写一行文本:
Chrome 标签页:Kaboo — https://kaboo.bytedance.net/?section=team
这行和图片是同一份草稿:它是普通文字,可以随意编辑或删掉,回车时一起发出。如果草稿正在发送中、或当前会话没有可编辑草稿,就只有图片进去,提示里会写「已附上(页面地址未能写入输入框):…」。
附件名带页面标题,例如 DeepSeek-Harness-155812.png。
整页截图目前只在接口层支持(POST /api/chrome-attach/shot {"full":true}),菜单里暂未单列一行。
三种通道怎么配
1. bridge:零权限,体验最好
在 DSH 插件页安装 dsh-chrome-bridge,并在 Chrome 里装好 DSH Bridge 扩展,点一次连接。插件调用 cb 命令(~/.dsh/bin/cb)拿到纯网页,不抢焦点。
2. cdp:Chrome 自带的 Remote debugging 开关
不需要扩展,也不需要屏幕录制。Chrome 136 收紧了 --remote-debugging-port,但 Chrome 现在自带一个开关:
- 打开
chrome://inspect/#remote-debugging,勾选 Remote debugging; - 在 DSH 里点「附加 Chrome」,首次连接会弹一次授权,允许即可;之后保持常驻连接,不再弹;
- Chrome 把选中的端口写进
<profile>/DevToolsActivePort,插件自动读取。登录态、标签页、扩展都不受影响。
这个开关受策略控制(DevToolsRemoteDebuggingAllowed);公司设备上被策略禁用时勾选框是灰的,此时只能走 window 通道或 bridge。
已经在用调试端口启动 Chrome 的,插件也会探测 9222/9223,以及 DSH_CHROME_DEBUG_PORT 指定的端口:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/.chrome-dsh-debug"
3. window:macOS 窗口截图(零 Chrome 改动)
什么都不用装,只需要给 DSH 授一次屏幕录制权限:
- 系统设置 → 隐私与安全性 → 屏幕录制 → 勾选 DeepSeek Harness;
- 完全退出并重开 DSH(macOS 对权限变更要求进程重启);
- 从
+菜单选「附加 Chrome 页面」。截图是 Chrome 窗口整体,包含标签栏、地址栏和侧栏。
窗口截图会缩到长边 2200px(Retina 下约 1 MB,仍足够看清页面)。窗口被其它窗口挡住时,插件会先把 Chrome 切到前台再抓屏,然后切回 DSH(约 1 秒的焦点切换);只支持 Google Chrome。
工作原理
浏览器(client/client.js)
└─ 点按钮 → POST /api/chrome-attach/shot {full}
└─ Host(lib/index.js → lib/capture.js)
├─ bridge: cb shot active --out … --json
├─ cdp: /json/version → WebSocket → Page.captureScreenshot
└─ window: Chrome AppleScript 取窗口坐标 → screencapture -R
← { dataUrl, title, url, source, degraded }
└─ dataUrl → File → 合成 drop → DSH 官方图片 intake → 草稿
└─ title + url → inputActions.insertText → 同一份草稿,插入一行
Host 侧只用 Node 内置模块,不 import profile 里可能解析不到的包。客户端只负责 + 菜单里的那一行,图片交给和真实拖拽相同的附件入口;那一行文本则走 inputActions——会话通过 slot prop 提供给插件的输入门面。插件注册一个无界面的 conversation.input.dock 条目把它交到手里,因此不直接碰会话,也自动继承门面的阶段/版本校验。
配置
| 变量 | 默认 | 说明 |
|---|---|---|
DSH_CHROME_ATTACH_MODE |
auto |
固定通道:bridge / cdp / window |
DSH_CHROME_DEBUG_PORT |
— | 额外探测的 CDP 端口 |
DSH_CHROME_BRIDGE_CB |
— | 显式指定 cb 路径 |
DSH_OSASCRIPT_BIN / DSH_SCREENCAPTURE_BIN |
系统路径 | 测试用覆盖 |
已知限制
- 只截当前活动标签页(
bridge/cdp)或当前 Chrome 窗口(window)。 - 那行页面信息是写进当前焦点的草稿的,所以需要草稿可编辑;正在发送时图片照样进,这一行会跳过(提示里会说明)。
window通道的标题/地址取自最前面那个标签页,描述的是页面而不是整个窗口。chrome://、Chrome 应用商店等受保护页面无法通过chrome.debugger截图;window模式不受此限制。window模式需要屏幕录制权限;首次失败会给出系统设置路径。- 图片走本机回环路由,不上传;最终以 DSH 附件形式落盘。
开发
npm run check
单独验证某一通道:
DSH_CHROME_ATTACH_MODE=window node -e "import('./lib/capture.js').then(m => m.capturePage())"
DSH_CHROME_DEBUG_PORT=9222 node -e "import('./lib/capture.js').then(m => m.capturePage({mode:'cdp'}))"
DSH_CHROME_BRIDGE_CB=/path/to/fake-cb node -e "import('./lib/capture.js').then(m => m.capturePage({mode:'bridge'}))"