在隐形桌面里跑 GUI 应用,让 Agent 代你点击操作
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add jafewff/dsh-vdesktop该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 35 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-vdesktop(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 00:32:29
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 28 处,展示前 19 条)
- 执行外部命令来自配置/变量lib/index.js:34
const proc = spawn(this.opts.command, this.opts.args, { - 写入本地文件lib/index.js:178
await mkdir(frameDir, { recursive: true }); - 读取本地文件lib/index.js:370
data = await readFile(file); - 发起网络请求lib/client.js:285
const resp = await fetch(url, { cache: "no-store" }); - 发起网络请求lib/client.js:516
const r = await fetch(url + "?desktop=" + encodeURIComponent(this.desktop) + "&t=" + Date.now(), { cache: "no-store" }); - 发起网络请求lib/client.js:582
await fetch(url, { - 发起网络请求lib/client.js:606
const r = await fetch(url, { - 发起网络请求lib/client.js:639
const pr = await fetch(`${altBase}/vdesk/desktops`, { cache: "no-store", signal: pac.signal }); - 发起网络请求lib/client.js:672
await fetch(url, { - 发起网络请求src/client/VDesktopPanel.ts:324
const resp = await fetch(url, { cache: 'no-store' }); - 发起网络请求src/client/VDesktopPanel.ts:563
const r = await fetch(url + '?desktop=' + encodeURIComponent(this.desktop) + '&t=' + Date.now(), { cache: 'no-store' }); - 发起网络请求src/client/VDesktopPanel.ts:611
await fetch(url, { - 发起网络请求src/client/VDesktopPanel.ts:636
const r = await fetch(url, { - 发起网络请求src/client/VDesktopPanel.ts:662
try { const pr = await fetch(`${altBase}/vdesk/desktops`, { cache: 'no-store', signal: pac.signal }); alive = pr.ok; } catch { alive = false; } finall - 发起网络请求src/client/VDesktopPanel.ts:683
await fetch(url, { - 发起网络请求src/client/index.ts:23
const r = await fetch(`${location.protocol}//${location.hostname}:${port}/vdesk/desktops`, { - 写入本地文件src/frameServer.ts:43
await mkdir(frameDir, { recursive: true }); - 读取本地文件src/frameServer.ts:259
data = await readFile(file); - 执行外部命令来自配置/变量src/transport/stdioJsonRpc.ts:40
const proc = spawn(this.opts.command, this.opts.args, {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 隐形桌面运行GUI应用
- 智能体代操作
- 真实鼠标点击接管
在不可见的 Win32 虚拟桌面上运行 GUI 应用:LLM 智能体通过 vdesk_* 工具操作,你则在 DSH(DeepSeek Harness)网页面板里旁观,还能用真实鼠标点击接管。
README
由 DeepSeek 最新模型翻译生成dsh-vdesktop
dsh-vdesktop 是 DSH(DeepSeek Harness) 的一个 cordis 插件:它在你本机上开一个用户看不见的 Win32 虚拟桌面(CreateDesktopW),把 GUI 应用跑进这个隔离桌面里,然后——
- 给模型:提供 12 个 vdesk_ 工具,让 Agent 对虚拟桌面上的应用截图、点击、打字、读文本、存文件;
- 给人:DSH 的 Web GUI 里提供一个 VDesktopPanel 面板,实时看到虚拟桌面的画面,并直接用鼠标点击操作(标准窗口的标题栏 ×/最小化/最大化、任务栏按钮都是真的)。
面板截图(本机 Windows 10 1809 LTSC 实测,均为 DSH Web GUI 中的 VDesktopPanel):
| VDesktopPanel 面板 | |
| 面板总览:桌面切换、实时帧(1280×720)、底部「输入到虚拟桌面」直发通道 | 虚拟桌面里正在运行的浏览器(DeepSeek 官网),右上角橙色为叠加光标 |
| 画面细节可放大看清:桌面内浏览器的 DevTools 控制台 | 点任务栏打开的资源管理器窗口,光标叠加在客户区 |
特性
- 虚拟桌面生命周期:创建 / 附着 / 列表 / 关闭 / 孤儿清理(dshv- 前缀的桌面在 DSH 启动时自动 sweep)。
展开完整文档(README 剩余 1 节)
dsh-vdesktop
dsh-vdesktop 是 DSH(DeepSeek Harness) 的一个 cordis 插件:它在你本机上开一个用户看不见的 Win32 虚拟桌面(CreateDesktopW),把 GUI 应用跑进这个隔离桌面里,然后——
- 给模型:提供 12 个 vdesk_ 工具,让 Agent 对虚拟桌面上的应用截图、点击、打字、读文本、存文件;
- 给人:DSH 的 Web GUI 里提供一个 VDesktopPanel 面板,实时看到虚拟桌面的画面,并直接用鼠标点击操作(标准窗口的标题栏 ×/最小化/最大化、任务栏按钮都是真的)。
面板截图(本机 Windows 10 1809 LTSC 实测,均为 DSH Web GUI 中的 VDesktopPanel):
| VDesktopPanel 面板 | |
| 面板总览:桌面切换、实时帧(1280×720)、底部「输入到虚拟桌面」直发通道 | 虚拟桌面里正在运行的浏览器(DeepSeek 官网),右上角橙色为叠加光标 |
| 画面细节可放大看清:桌面内浏览器的 DevTools 控制台 | 点任务栏打开的资源管理器窗口,光标叠加在客户区 |
特性
- 虚拟桌面生命周期:创建 / 附着 / 列表 / 关闭 / 孤儿清理(dshv- 前缀的桌面在 DSH 启动时自动 sweep)。
- Agent 工具面(12 个 vdesk_ 工具):桌面生命周期、整桌截图、区域放大(1x–4x zoom)、鼠标(move/click/double/right/middle/drag/scroll)、键盘(type/press/hotkey,含中文与 emoji)、写文本、读文本、把窗口文本存成文件。
- 帧数据面:插件内置一个 frameServer(HTTP,127.0.0.1:8790 起自动探测到 8799),Web 面板通过它低频轮询 PNG 帧;光标位置经响应头(X-Cursor-X/Y)随帧下发,由面板叠加绘制。
- 真实窗口语义的点击(面板/Agent 共用同一执行面):
- 标准 DWM 标题栏的 ×/最小化/最大化 → WM_NCHITTEST 判别后直接发 WM_CLOSE / SC_MINIMIZE / SC_MAXIMIZE|RESTORE(对记事本、资源管理器这类标准框直接生效);
- 自绘标题栏的窗口(VSCode、WPS 等)→ postmessage 客户区消息,走应用自己的处理逻辑;
- 任务栏按钮点击 → 等价窗口管理动作(激活 / 启动该按钮对应的应用)。
- 进程监督:Python sidecar 以子进程方式由插件托管,心跳监测 + 惰性重启 + 空闲回收。
架构
┌─────────────────────────────── DSH (cordis) 应用进程 ───────────────────────────────┐ │ 插件 dsh-vdesktop (lib/index.js) │ │ ├─ SidecarSupervisor ──JSON-RPC over stdio──▶ python -m dshv (sidecar 子进程) │ │ ├─ FrameServer (127.0.0.1:8790+) ◀──HTTP 抓帧/输入── DSH Web GUI (VDesktopPanel) │ │ └─ 12 个 vdesk_* 工具 + computerUse 注入(供 Agent 使用) │ └──────────────────────────────────────────────────────────────────────────────────────┘ │
python dshv (纯 ctypes,无第三方依赖)
│ CreateDesktopW / BitBlt / PostMessage
┌───────────────────▼───────────────────┐
│ 虚拟桌面 dshv-(用户屏幕上看不到) │ │ notepad / explorer / 任意 GUI 应用 │ └───────────────────────────────────────┘
- sidecar(sidecar/dshv/):纯 Python ctypes 实现,虚拟桌面生命周期、GDI 抓帧、缩放、编码,以及输入链路(SendInput → PostMessage → SendMessage 逐级降级 + 光标自维护)。
- frameServer(src/frameServer.ts):轻量 HTTP 服务,/vdesk/frame、/vdesk/desktops、/vdesk/input、/vdesk/launch、/vdesk/processes、/vdesk/activate、/vdesk/close_window 等路由,转发给 sidecar。
环境要求
| 组件 | 要求 |
| 操作系统 | Windows 10 / 11(1809 LTSC 实测) |
| 运行时 | Node.js LTS(构建与插件宿主) |
| Python | 3.11+(sidecar 纯 ctypes,无需 pip 安装任何依赖) |
| 宿主 | DSH(含 cordis 插件机制) |
安装
1. 克隆本仓库并构建(仓库已附带 lib/ 构建产物,仅当源码有改动时才需要重新构建):
git clone dsh-vdesktop
cd dsh-vdesktop
npm install
npm run build # esbuild → lib/(可选,lib/ 已入库)
2. 在 DSH 的 web profile 中安装插件(以 C:\Users\\.dsh\profiles\web 为例):
- 在该 profile 的 package.json 的 dependencies 里加一行指向本仓库的 link: 依赖;
- 在 profile 配置中把 dsh-vdesktop 加入 dsh.profile.bundles;
- pnpm install(或 npm install)后重启 DSH。
链接安装的写法示例:"dsh-vdesktop": "link:"。
3. 确认 sidecar 工作目录:插件以 python -m dshv --rpc stdio 拉起 sidecar,工作目录由 sidecarCwd 决定。仓库自带的 cordis.patch.yml 与 src/config.ts 中的默认值是作者的本地路径(D:\Project\dsh-virtaul-computer\sidecar),安装时请改成 \sidecar(绝对路径)。
4. 安装后自检(DSH 重启、插件加载后,任选其一):
curl.exe -s http://127.0.0.1:8790/vdesk/desktops # 返回 {"desktops":[...]} 即数据面已就绪 curl.exe -s -o NUL -w "%{http_code}" "http://127.0.0.1:8790/vdesk/frame?desktop=dshv-e2e" # 200 即抓帧链路通
打开 DSH Web GUI,VDesktopPanel 面板出现桌面画面即全部就绪。
使用
面板(VDesktopPanel)
- 选择 / 创建虚拟桌面,画面以低频轮询方式实时刷新;
- 画面上的点击就是真实输入:点标题栏 ×/最小化/最大化直接生效(标准窗口走 WM_NCHITTEST 非客户区拦截,自绘窗口走 postmessage);点任务栏按钮等价于激活 / 启动对应应用;
- 面板上的光标是叠加层(经 X-Cursor-X/Y 响应头跟随),不是烧进帧里的。
Agent 工具(vdesk_)
| 工具 | 用途 |
| vdesk_desktop_create | 创建虚拟桌面并启动一个 GUI 应用(返回桌面句柄 / PID / 顶层 HWND) |
| vdesk_desktop_close | 关闭虚拟桌面并终止其上的进程 |
| vdesk_desktop_list | 列出所有 dshv- 虚拟桌面 |
| vdesk_orphan_sweep | 清理孤儿虚拟桌面 |
| vdesk_screenshot | 整桌截图落盘(jpg/png,可选质量) |
| vdesk_zoom | 指定区域 1x–4x 放大截图 |
| vdesk_click | 单点(left/right,客户区坐标) |
| vdesk_mouse | move / click / double_click / right_click / middle_click / drag / scroll |
| vdesk_keyboard | type / press / hotkey(支持中文、emoji 与组合键) |
| vdesk_type | 向目标窗口写入整段文本 |
| vdesk_read_text | 读取目标窗口文本(优先 Edit 子窗) |
| vdesk_save_file | 把窗口文本保存到文件 |
行为细节与已知限制
- 输入降级链:sidecar 的 vdesk 工作线程里 SendInput 恒 ACCESS_DENIED(虚拟桌面非前台),因此客户区点击实际走 postmessage(客户区坐标);标准框标题栏按钮由 WM_NCHITTEST 判别后直接发窗口管理消息,两条路径都已在验收矩阵覆盖。
- launch 是异步的:/vdesk/launch 立即返回 pid(windowReady 恒为 false),目标窗口稍后才出现,请按 pid 匹配顶层窗口。
- 开始菜单为最佳努力:任务栏"开始"按钮触发 taskbar/start 动作,完整开始菜单操作需要真实输入通道,暂未实现。
- 光标由 sidecar 自维护"最后已知位置"并在每帧点击后同步(任务栏 / 标题栏按钮 / 客户区三条路径都会跟随)。
- 端口:frameServer 从 8790 起探测,冲突时 +1 直到 8799 上限;CORS 精确白名单默认 http://127.0.0.1:3080(DSH Web GUI)。
- DPI:在 100% 缩放的 1920×1080 桌面实测(帧 1280×720 ← 源 1920×1080 线性映射);其他缩放比未系统验证。
开发
npm run build # TS 侧 esbuild → lib/
cd sidecar
python -m py_compile dshv\rpc_stdio.py # sidecar 语法自检
python -m dshv --help # CLI:--create-desktop / --attach-desktop / --sweep / --rpc stdio
- 设计文档(gui-agent-plan 01–07b)、里程碑交接记录保留在作者本地工作区,未随仓库发布(仓库只含运行所需代码);
- 一次性补丁/验收脚本(scripts/patch-.mjs、scripts/accept-.mjs 等)保留在作者本地工作区,未随仓库发布;
- 抓帧为纯 GDI(BitBlt + 缩放 + JPEG/PNG 编码),不依赖 GDI+ 或任何第三方 Python 包。
仓库结构
├── src/ # TS 插件主体(supervisor / frameServer / 工具 / Web 面板) │ ├── client/ # VDesktopPanel Web UI │ ├── tools/ # 12 个 vdesk_ 工具定义 │ └── transport/ # JSON-RPC over stdio ├── lib/ # esbuild 构建产物(link: 安装免构建即用) ├── sidecar/ │ ├── pyproject.toml # dshv 包定义(Python 3.11+,纯 ctypes) │ └── dshv/ # sidecar 产品包(win32 抓帧/输入/桌面生命周期) ├── scripts/build-ts.mjs # npm run build(tsc + esbuild → lib/) ├── screenshots/ # README 引用的面板截图 ├── cordis.patch.yml # cordis 服务声明(安装时按本机路径修改 sidecarCwd) ├── package.json # 插件包 dsh-vdesktop └── esbuild.config.mjs / tsconfig.json
License
MIT © dsh-vdesktop contributors
基于 DSH / cordis 插件机制构建。
English Overview
dsh-vdesktop is a plugin for DSH (DeepSeek Harness / cordis) that runs GUI applications on an isolated, invisible Win32 virtual desktop (CreateDesktopW). An LLM agent drives those apps through 12 vdesk_* tools (screenshots, zoom, mouse, keyboard, text I/O, desktop lifecycle), while the DSH web GUI ships a VDesktopPanel so a human can watch the virtual desktop live and operate it with real mouse clicks — title-bar buttons, taskbar buttons and window management all behave like a normal desktop.
Stack: TypeScript plugin (src/, built to lib/) + a dependency-free pure-ctypes Python sidecar (sidecar/dshv/, JSON-RPC over stdio) + a built-in frame server (127.0.0.1:8790+). Windows 10/11, Node LTS, Python 3.11+. See the Chinese section above for installation and usage details.预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
jafewff/dsh-vdesktop
在隐形桌面里跑 GUI 应用,让 Agent 代你点击操作
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
智能体运行框架路由HarnessRouter/harnessrouter
智能体 harness 的统一接口。
★ 3,984已汉化DSH
71.3
这是你的仓库?认领条目