连接 Chrome 并让模型直接操控页面调试
29.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xiaobai2017666/dsh-chrome-cdp该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 56 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-chrome-cdp(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/21 23:52:03
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 38 处,展示前 30 条)
- 发起网络请求lib/index.js:375
return (await fetch(`http://${host}:${port}/json/version`, { signal: controller.signal })).ok; - 读取本地文件lib/index.js:386
return existsSync("/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe"); - 读取本地文件lib/index.js:422
for (const exe of WINDOWS_CHROME_PATHS) if (existsSync(exe)) return windowsInstallation(exe); - 读取本地文件lib/index.js:426
if (process.platform === "darwin" && existsSync(macPath)) return unixInstallation("Google Chrome (macOS)", macPath, ["Google Chrome"]); - 执行外部命令来自配置/变量lib/index.js:475
const child = spawn(command, args, { - 读取本地文件lib/index.js:650
if (!existsSync(compositionSource)) { - 读取本地文件lib/index.js:658
if (!existsSync(targetComposition)) { - 读取本地文件lib/index.js:659
const desired = readFileSync(compositionSource, "utf8").replaceAll(LEGACY_TOOLS_ROW, row); - 写入本地文件lib/index.js:660
mkdirSync(targetDir, { recursive: true }); - 写入本地文件lib/index.js:661
writeFileSync(targetComposition, desired); - 写入本地文件lib/index.js:679
writeFileSync(targetComposition, desired); - 写入本地文件lib/index.js:697
writeFileSync(target, source); - 写入本地文件lib/index.js:709
writeFileSync(join(targetDir, STAMP_FILENAME), `${JSON.stringify(stamp, void 0, 2)}\n`); - 发起网络请求src/chrome-launcher.ts:80
const response = await fetch(`http://${host}:${port}/json/version`, { signal: controller.signal }) - 读取本地文件src/chrome-launcher.ts:93
return existsSync('/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe') - 读取本地文件src/chrome-launcher.ts:132
if (existsSync(exe)) return windowsInstallation(exe) - 读取本地文件src/chrome-launcher.ts:139
if (process.platform === 'darwin' && existsSync(macPath)) { - 执行外部命令来自配置/变量src/chrome-launcher.ts:199
const child = spawn(command, args, { - 读取本地文件src/index.ts:262
return JSON.parse(readFileSync(join(root, '..', 'package.json'), 'utf8'))['version'] as string - 读取本地文件src/preset-provision.ts:108
if (!existsSync(compositionSource)) { - 读取本地文件src/preset-provision.ts:118
if (!existsSync(targetComposition)) { - 读取本地文件src/preset-provision.ts:121
const desired = readFileSync(compositionSource, 'utf8') - 写入本地文件src/preset-provision.ts:123
mkdirSync(targetDir, { recursive: true }) - 写入本地文件src/preset-provision.ts:124
writeFileSync(targetComposition, desired) - 读取本地文件src/preset-provision.ts:135
const current = readFileSync(targetComposition, 'utf8') - 写入本地文件src/preset-provision.ts:152
writeFileSync(targetComposition, desired) - 读取本地文件src/preset-provision.ts:170
const source = readFileSync(join(sourceDir, 'preset.yml'), 'utf8') - 读取本地文件src/preset-provision.ts:172
if (existsSync(target) && readFileSync(target, 'utf8') === source) return false - 写入本地文件src/preset-provision.ts:173
writeFileSync(target, source) - 写入本地文件src/preset-provision.ts:184
writeFileSync(join(targetDir, STAMP_FILENAME), `${JSON.stringify(stamp, undefined, 2)}\n`)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-llm@deepseek-ai/dsh-settings给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- CDP连接Chrome
- 操控页面调试
README
由 DeepSeek 最新模型翻译生成dsh-chrome-cdp
用于 DeepSeek Harness(DSH)的 Chrome DevTools Protocol 插件。通过 chrome-remote-interface(CRI)以 CDP 连接并操控 Chrome,提供两半能力:
- 连接面板(Web GUI):显示连接状态、编辑连接参数(host/port/自动重连)、连接/断开/重连 socket、浏览 target 列表;
- Agent 工具(11 个 chrome_ 工具):模型在会话里直接导航、求值、抓控制台/网络、打断点调试、截图、点击、输入,以及一个发任意 CDP 命令的万能直通。
┌──────────────── DSH Host 进程 ────────────────┐ │ host 树 fiber │ │ └─ dsh-chrome-cdp (lib/index.js) │ │ ├─ ChromeCdpService ── CRI ──► Chrome │ │ └─ /cdp/ RPC ◄─ Web 面板 │ │ │ │ preset 树 fiber (会话组合) │ │ └─ dsh-chrome-cdp/tools (lib/tools.mjs) │ │ └─ 11 个 chrome_* 工具 │ │ │ │ 两半通过包根 bridge.mjs 单例共享连接 │ └─────
展开完整文档(README 剩余 1 节)
dsh-chrome-cdp
用于 DeepSeek Harness(DSH)的 Chrome DevTools Protocol 插件。通过 chrome-remote-interface(CRI)以 CDP 连接并操控 Chrome,提供两半能力:
- 连接面板(Web GUI):显示连接状态、编辑连接参数(host/port/自动重连)、连接/断开/重连 socket、浏览 target 列表;
- Agent 工具(11 个 chrome_ 工具):模型在会话里直接导航、求值、抓控制台/网络、打断点调试、截图、点击、输入,以及一个发任意 CDP 命令的万能直通。
┌──────────────── DSH Host 进程 ────────────────┐ │ host 树 fiber │ │ └─ dsh-chrome-cdp (lib/index.js) │ │ ├─ ChromeCdpService ── CRI ──► Chrome │ │ └─ /cdp/ RPC ◄─ Web 面板 │ │ │ │ preset 树 fiber (会话组合) │ │ └─ dsh-chrome-cdp/tools (lib/tools.mjs) │ │ └─ 11 个 chrome_* 工具 │ │ │ │ 两半通过包根 bridge.mjs 单例共享连接 │ └────────────────────────────────────────────────┘
目录
- 工具一览
- 安装到 DSH
- Chrome 侧准备
- 面板使用
- 验证与排查
工具一览
11 个工具按 5 组注册,preset 配置里 groups.: false 可整组关闭(不注册、零 schema 占用)。全部开启时约占 2K tokens 常驻上下文。
| 工具 | 组 | 说明 |
| chrome_list_targets | navigation | 列出 CDP 可达的 target(标签页/窗口/worker),获取 targetId;排查起点 |
| chrome_navigate | navigation | 导航到 URL,等待 commit + load(有界等待);默认目标或指定 targetId |
| chrome_evaluate | navigation | 在页面里求值 JS,支持 await Promise;paused 时自动改走 Debugger.evaluateOnCallFrame(同 session 的 Runtime.evaluate 在断点挂起时会永久排队) |
| chrome_console | diagnostics | 读取页面 console.* 与浏览器级 Log 条目(环形缓冲 300 条),游标增量拉取 |
| chrome_network | diagnostics | 读取网络请求生命周期(状态/大小/耗时/重定向合并,环形缓冲 500 条),游标增量拉取 |
| chrome_debug | debug | Debugger 控制:pause/resume/单步,在暂停的调用帧上求值(看局部变量) |
| chrome_breakpoint | debug | 断点管理:按 URL+行号设置(可带条件)、列出、删除;列出已解析脚本定位行号 |
| chrome_screenshot | interaction | 页面截图;persist: true 时存为 attachment 供多模态查看,否则返回截断的 base64 文本 |
| chrome_click | interaction | 按 CSS 选择器或视口坐标点击;trusted input dispatch(非合成 DOM 事件) |
| chrome_type | interaction | 向聚焦元素输入文本;ASCII 走按键事件,非 ASCII(中文等)走 Input.insertText |
| chrome_cdp | raw | 万能直通:发任意 Domain.method CDP 命令。逃生舱,覆盖 50 域 568 命令的长尾 |
工具输出 schema 一律声明可选 error/hint 字段:错误分支返回结构化 {error, hint},不会被 additionalProperties: false 拒成 "invalid output"。
会话里可以这样用:
- "列出浏览器目标"
- "打开 example.com 并截图"
- "看当前页面控制台有没有 error"
- "刷新页面,列出失败的网络请求"
- "在 app.js 第 42 行下断点,点按钮,然后看暂停处的变量"
安装到 DSH
前置
- 任意方式安装的 dsh CLI(npm 全局或源码 checkout 运行均可)
- Node ≥ 20,pnpm(dsh plugin 底层转发给 pnpm)
- dsh ≥ 0.1.2-alpha.3:0.2.0 起插件对齐该版本的 settings/client API(installSettingsSection → SettingsProvider.installSection,dsh-client-runtime → dsh-client-store);旧版 dsh(≤ 0.1.1-rc.2)请用插件 0.1.1。
安装插件包(host 半边 + 面板 + bundle 层)——生产环境主要手段
dsh plugin --profile web add github:xiaobai2017666/dsh-chrome-cdp
这是生产环境安装的主要手段:不写 # ref 时,pnpm 跟踪仓库默认分支(本仓库为 master)的最新提交。lib/、client/ 等构建产物随 git 提交发布(不经 npm 发布、不挂 Release),包内没有任何 prepare/build 脚本,所以 pnpm 安装时不执行任何构建、不触发 allowBuilds 门禁——一条命令直接装完。dsh plugin 检测到包声明 dsh.bundle,自动把 dsh-chrome-cdp 追加进 dsh.profile.bundles;下次启动时 bundle patch 自动插入 host 行(chrome-cdp),面板经 dsh.client 声明自动挂进 Web GUI——不需要手写任何 profile patch。
默认分支前进后更新(无 pin 跟踪分支的唯一维护动作):
dsh plugin --profile web update dsh-chrome-cdp
因为包内没有构建脚本,更新也不涉及 allowBuilds 轮换——update 重新解析默认分支,直接跳到新 commit。
需要可复现/受控升级时,可以退回 pin 形式 # 或 #v0.1.1(tag):spec 固定不变,更新完全受控;代价是失去“update 即跟进分支”的便利。两种形态随时可用 add 互换,lockfile 会随 add 重写。本仓库按 Keep a Changelog 记录每次发版变更,跟随 master 即可获得累积更新。
更新与卸载
dsh plugin --profile web update dsh-chrome-cdp # 跟进默认分支最新 commit(白名单 key 轮换见步骤 1)
dsh plugin --profile web remove dsh-chrome-cdp # 卸载:连依赖和 bundle 层一起摘
rm -rf ~/.dsh/.agent-presets/chrome-cdp-tools # 卸载:摘 preset
开发循环
改 src/ 后:
npm run build # 三个产物
touch ~/.dsh/profiles/web/cordis.patch.yml # host 半边热重载(~6-8s)
preset YAML 改动即时生效;client 产物需浏览器刷新
- 诊断脚本:scripts/tools-probe.mjs(11 工具 25 用例,含断点真实命中)、cdp-probe.mjs/cdp-console.mjs(裸 CRI 驱动)
- 设计文档:DESIGN.tools.md
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xiaobai2017666/dsh-chrome-cdp
连接 Chrome 并让模型直接操控页面调试
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目