dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Built-in browser panel for the DeepSeek Harness web client: live screencast, element picker → composer attachments, Playwright-driven model tools
给 DeepSeek Harness (dsh) Web 客户端加一个内置浏览器面板:右侧栏实时显示 Playwright Chromium 的画面,可以导航、点击、输入;开启「选择元素」后点击页面元素,元素截图 + 结构化信息会作为附件挂到输入框,补充需求后发送给模型。同时注册一组浏览器操作工具,让模型能自主打开页面、截图验收代码修改。
MousePointerClick 图标)后进入选择模式,点击页面元素会立刻以原生引用 chip 的形式把 元素1、元素2…… 插入 dsh 输入框(与 @文件 引用同一机制:Lexical chip 节点,可删除、可撤销、跟随草稿持久化)。像引用文件一样在句子里自由组合:
把元素1和元素2调换位置 发送时每个 chip 自动展开为该元素的完整信息(选择器 / 标签 / 文本 / outerHTML / 所在页面 URL),模型据此精确定位要改的元素。元素登记表存于 sessionStorage,客户端刷新后已插入的 chip 仍可序列化。输入框清空(发送完成或手动清空)后计数自动归零,下一轮从 元素1 重新开始。
browser_navigate / browser_screenshot / browser_snapshot / browser_click / browser_type):模型可以打开页面、看截图(返回持久化 image 附件,多模态可见)、拿交互元素大纲([12] <button> "Submit" 风格索引)、按索引点击和输入——「改代码 → 自己打开页面 → 截图验收」闭环。browser_screenshot 的结果在聊天里渲染为图片卡片。dsh web(web profile)npx playwright install chromium(下载到 ~/.cache/ms-playwright,无需 root)能 sudo 的话直接 sudo apt-get install -y libnspr4 libnss3 最省事。
不能 sudo 时用本仓库自带的脚本(apt-get download + dpkg -x 解压到插件内,启动时自动注入 LD_LIBRARY_PATH):
scripts/fetch-deps.sh
lib/ 已随仓库提交,git 安装不需要本地构建:
npx @deepseek-ai/dsh plugin --profile web add github:TEGONG00/dsh-plugin-browser
npx playwright install chromium
若 pnpm ≥ 10 因 install scripts 询问授权,本包没有 install scripts,正常情况下不会触发;按 dsh 提示操作即可。
git clone https://github.com/TEGONG00/dsh-plugin-browser.git
cd dsh-plugin-browser
npm install
npm run build
npx playwright install chromium
# 把 cordis.patch.yml 里的 name 改成你本机的 lib/index.js 绝对路径,然后:
cd ..
npx @deepseek-ai/dsh web --patch ./dsh-plugin-browser/cordis.patch.yml --no-open
打开终端输出的 http://127.0.0.1:3080/?token=…,侧栏底部点「浏览器」。
cordis.patch.yml 里 insert 条目的 config:
| 字段 | 默认 | 说明 |
|---|---|---|
headless | true | 无头运行 Chromium |
viewport.width/height | 1280×800 | 初始视口(面板会实时跟随面板尺寸) |
cdpEndpoint | — | 改为连接已运行的浏览器(--remote-debugging-port) |
executablePath | — | 自定义 Chromium 路径 |
jpegQuality | 80 | 画面流与截图的 JPEG 质量(1-100) |
navigationTimeoutMs | 30000 | 导航超时 |
hardwareAcceleration | auto | GPU 加速 flags:auto(检测到 /dev/dxg 才启用)/ on / off。headless 下常静默回退软件渲染,属尽力而为 |
userDataDir | ~/.cache/dsh-plugin-browser/profile | 持久化浏览器档案(缓存/Cookie 跨重启保留,二次加载同站明显提速) |
window.devicePixelRatio 传给宿主,通过 CDP 设备度量仿真让页面按显示密度渲染位图,高分屏(Windows 125%/150% 缩放)不再发虚;jpegQuality 可再调。node scripts/ui-smoke.mjs <token> # 打开真实 Web UI 走完 面板→导航→选元素→附件 全流程
node scripts/footer-verify.mjs <token> # 断言「浏览器」与「设置」两行几何一致
ctx.sidebarRightTabs.register() + keyed slot sidebar.right.pane.tab(docs/subsystems/sidebar-right.zh.md);入口按钮走 sidebar.footer.action list slot,样式逐字复刻设置触发行(行容器 + 42px 按钮 + rail 圆形形态)。dsh.client: {platform: 'web'} + exports['./client'],host 自动扫描并经 /plugins/ 下发;产物是 window.__ModuleLoader__.load({id, factory}) lazy-CJS(scripts/build.mjs 用 esbuild banner/footer 复刻)(docs/subsystems/client-modules.zh.md)。ctx.inputTriggers.registerSource() 注册 @ 触发源(codec.serialize 在提交时把 chip 展开为元素信息);插入走 ctx.sessions.binding(id).ctx → ctx.conversation.input.for(actx).insertReference()(docs/subsystems/ conversation 契约与 dsh-client-ui-input-trigger 类型)。TokenSpan 坐标在 detect 空间——每个 chip 占 1 字符,插入锚点 = 剪贴板草稿长度 − Σ(chip 额外宽度)。ctx.webServer.register() 两条自有路由——GET /dsh-browser/api/stream(SSE:画面帧/状态/选取事件)+ POST /dsh-browser/api/cmd(指令下发),Origin 同源校验(docs/subsystems/web-server.zh.md)。@deepseek-ai/dsh-client-ui-primitives(platform module,与「收起侧栏」同源,currentColor 跟随主题);「选择元素」用 lucide-react MousePointerClick(tree-shake 后 ~2KB 入 bundle)。tool.call.toolview keyed slot 按 wire 工具名注册(docs/cookbook/adding-a-tool.zh.md「Web Client 展示」)。--host 0.0.0.0 暴露到不可信网络。