置顶悬浮对话面板,框选屏幕截图直接提问
29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 18840024879/dsh-float该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · desktop
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 52 处,展示前 52 条)
- 读取本地文件lib/index.js:65
return electronCandidates().find((value) => existsSync(value)) ?? null - 执行外部命令固定命令lib/index.js:70
execFile( - 写入本地文件lib/index.js:127
mkdirSync(ELECTRON_ROOT, { recursive: true }) - 读取本地文件lib/index.js:137
if (!existsSync(join(staging, 'electron.exe')) || !existsSync(join(staging, 'ffmpeg.dll'))) { - 删除本地文件递归lib/index.js:140
rmSync(ELECTRON_DIR, { recursive: true, force: true }) - 写入本地文件lib/index.js:141
renameSync(staging, ELECTRON_DIR) - 删除本地文件lib/index.js:142
rmSync(zip, { force: true }) - 删除本地文件递归lib/index.js:144
rmSync(staging, { recursive: true, force: true }) - 删除本地文件lib/index.js:145
rmSync(zip, { force: true }) - 发起网络请求lib/index.js:185
return fetch(`http://127.0.0.1:${ready.port}/bridge`, { - 读取本地文件lib/index.js:420
if (!existsSync(HELPER_MAIN)) { - 执行外部命令来自配置/变量lib/index.js:432
const proc = spawn(electron, [HELPER_MAIN], { - 读取本地文件lib/index.js:541
return JSON.parse(readFileSync(join(PLUGIN_ROOT, 'package.json'), 'utf8')).version - 读取本地文件lib/chat.js:236
if (!existsSync(full)) throw fail('IMAGE_INVALID', '截图文件不存在。') - 读取本地文件lib/chat.js:237
const stat = statSync(full) - 读取本地文件lib/chat.js:241
const bytes = new Uint8Array(readFileSync(full)) - 读取本地文件lib/chat.js:263
if (full.startsWith(SHOT_DIR + sep) && existsSync(full)) unlinkSync(full) - 删除本地文件lib/chat.js:263
if (full.startsWith(SHOT_DIR + sep) && existsSync(full)) unlinkSync(full) - 读取本地文件lib/config.js:28
if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR, { recursive: true }) - 写入本地文件lib/config.js:28
if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR, { recursive: true }) - 读取本地文件lib/config.js:33
if (!existsSync(file)) return fallback - 读取本地文件lib/config.js:34
const value = JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件lib/config.js:63
writeFileSync(tmp, JSON.stringify(value, null, 2), 'utf8') - 写入本地文件lib/config.js:64
renameSync(tmp, file) - 写入本地文件runtime/electron-helper/capture.js:233
fs.mkdirSync(SHOT_DIR, { recursive: true }) - 执行外部命令固定命令runtime/electron-helper/capture.js:258
execFile( - 写入本地文件runtime/electron-helper/capture.js:331
fs.writeFileSync(out, cropped.toPNG()) - 删除本地文件runtime/electron-helper/capture.js:570
fs.unlinkSync(temp) - 写入本地文件runtime/electron-helper/debug.js:12
fs.mkdirSync(path.dirname(DEBUG_LOG), { recursive: true }) - 读取本地文件runtime/electron-helper/debug.js:14
if (fs.statSync(DEBUG_LOG).size > MAX_LOG_BYTES) fs.writeFileSync(DEBUG_LOG, '') - 写入本地文件runtime/electron-helper/debug.js:18
fs.appendFileSync(DEBUG_LOG, `${new Date().toISOString()} ${message}\n`) - 读取密钥环境变量runtime/electron-helper/main.js:38
const PREFERRED_HOTKEY = process.env.DSH_FLOAT_HOTKEY || 'Alt+Space' - 读取本地文件runtime/electron-helper/main.js:133
const dataUrl = `data:image/png;base64,${fs.readFileSync(file).toString('base64')}` - 发起网络请求runtime/electron-helper/main.js:150
const data = await bridge.request(method, payload?.params || {}) - 发起网络请求runtime/electron-helper/main.js:210
.request('chat.send', { text: 'selftest' }) - 发起网络请求runtime/electron-helper/main.js:214
void bridge.request('chat.abort', { chatId: ack.chatId }).catch(() => {}) - 发起网络请求runtime/electron-helper/main.js:225
const catalog = await bridge.request('models.list') - 发起网络请求runtime/electron-helper/main.js:233
await bridge.request('helper.quit').catch(() => {}) - 发起网络请求runtime/electron-helper/main.js:316
void bridge.request('config.set', { hotkey: registered }).catch(() => {}) - 删除本地文件runtime/electron-helper/mock-host.js:89
fs.unlinkSync(imagePath) - 读取本地文件runtime/electron-helper/pet-watch.js:20
].find((file) => fs.existsSync(file)) || null - 读取本地文件runtime/electron-helper/pet-watch.js:26
source = fs.readFileSync(SOURCE, 'utf8') - 读取本地文件runtime/electron-helper/pet-watch.js:35
if (fs.existsSync(exe)) { - 写入本地文件runtime/electron-helper/pet-watch.js:48
fs.mkdirSync(BIN_DIR, { recursive: true }) - 执行外部命令来自配置/变量runtime/electron-helper/pet-watch.js:55
execFile( - 删除本地文件runtime/electron-helper/pet-watch.js:63
fs.unlinkSync(exe) - 读取本地文件runtime/electron-helper/pet-watch.js:70
if (!fs.existsSync(exe)) { - 执行外部命令来自配置/变量runtime/electron-helper/pet-watch.js:93
child = spawn(exe, [], { - 读取本地文件runtime/electron-helper/window.js:21
const value = JSON.parse(fs.readFileSync(BOUNDS_FILE, 'utf8')) - 写入本地文件runtime/electron-helper/window.js:37
fs.mkdirSync(DATA_DIR, { recursive: true }) - 写入本地文件runtime/electron-helper/window.js:38
fs.writeFileSync(BOUNDS_FILE, JSON.stringify(bounds), 'utf8') - 发起网络请求runtime/ui/app.js:45
const result = await api.request(method, params)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 的 Windows 桌面悬浮助手
README
由 DeepSeek 最新模型翻译生成dsh-float
豆包风格的 DeepSeek Harness 桌面助手:常驻置顶的独立对话面板,面板可自由缩放,框选屏幕区域直接提问。使用 dsh 里已经配置好的模型与账号,不需要另外填 API Key。
仅支持 Windows 10/11 x64。English: README.en.md
功能
- 双击桌宠打开:安装了 dsh-pet 时,双击桌宠本体打开/隐藏面板(两次点击需在系统双击间隔内、位置基本不变),单击或拖动桌宠不会误触;不装桌宠也能用 Alt+Space 或托盘菜单。
- 面板可拖动标题栏移动,拖右边缘、底边或右下角缩放;位置与大小自动记忆。
- 流式回答、停止生成、模型选择、新对话、历史保留最近 8 轮。
- 回答里的 LaTeX 公式($...$、$$...$$、\(...\)、\[...\])用本地 KaTeX 渲染,内置 KaTeX 字体,效果与豆包悬浮窗一致;Markdown 的标题、有序/无序列表、表格、分隔线、引用、代码块、粗体与行内代码也会正常显示,不再出现 ##、- 、--- 之类的原始符号。
- 截图提问:框选屏幕区域,图片作为附件发送;发送过的截图会以缩略图留在对话历史里,重新打开面板也能看到。遮罩窗口常驻预热,悬停相机按钮时就开始取屏幕流,因此点下去很快出现选区;遮罩等截图画面绘好后才淡入,不会先黑一下再显示。
展开完整文档(README 剩余 1 节)
dsh-float
豆包风格的 DeepSeek Harness 桌面助手:常驻置顶的独立对话面板,面板可自由缩放,框选屏幕区域直接提问。使用 dsh 里已经配置好的模型与账号,不需要另外填 API Key。
仅支持 Windows 10/11 x64。English: README.en.md
功能
- 双击桌宠打开:安装了 dsh-pet 时,双击桌宠本体打开/隐藏面板(两次点击需在系统双击间隔内、位置基本不变),单击或拖动桌宠不会误触;不装桌宠也能用 Alt+Space 或托盘菜单。
- 面板可拖动标题栏移动,拖右边缘、底边或右下角缩放;位置与大小自动记忆。
- 流式回答、停止生成、模型选择、新对话、历史保留最近 8 轮。
- 回答里的 LaTeX 公式($...$、$$...$$、\(...\)、\[...\])用本地 KaTeX 渲染,内置 KaTeX 字体,效果与豆包悬浮窗一致;Markdown 的标题、有序/无序列表、表格、分隔线、引用、代码块、粗体与行内代码也会正常显示,不再出现 ##、- 、--- 之类的原始符号。
- 截图提问:框选屏幕区域,图片作为附件发送;发送过的截图会以缩略图留在对话历史里,重新打开面板也能看到。遮罩窗口常驻预热,悬停相机按钮时就开始取屏幕流,因此点下去很快出现选区;遮罩等截图画面绘好后才淡入,不会先黑一下再显示。
- 文本模型遇到图片时,会自动寻找可用的 modlens 视觉路由;找不到会明确报错,不会静默丢图。
- 默认快捷键 Alt+Space;被占用时自动降级为 Ctrl+Alt+Space,托盘菜单也可打开/截图/退出。
- 关闭 dsh 后 Helper 自动退出,不留后台进程。
安装
从命令行安装(普通用户)
dsh plugin --profile desktop add dsh-float
装完重启 DeepSeek Harness。Helper 是独立的 Electron 进程:会依次查找 DSH_FLOAT_ELECTRON_PATH、DSH_PET_ELECTRON_PATH、插件自带依赖、~\.dsh\electron\electron.exe,都没有时首次启动会下载 Electron 43.3.0 到 ~\.dsh\dsh-float\electron\(约 110 MB,仅一次;优先 npmmirror,失败回退 GitHub)。想复用现成的运行时,设置 DSH_FLOAT_ELECTRON_PATH 即可跳过下载。
本地开发安装
插件目录:%USERPROFILE%\.dsh\plugins\dsh-float,profile:%USERPROFILE%\.dsh\profiles\desktop。
1. 登记依赖:在 profile 的 package.json 中加
"dsh-float": "link:C:/path/to/dsh-float"
并在 dsh.profile.bundles 数组末尾加 "dsh-float"。
2. 安装链接(使用 dsh 自带运行时):
NODE="$HOME/.dsh/dsh-runtimes/dsh-primary-runtime/dependencies/node/bin/node.exe"
PNPM="$HOME/.dsh/dsh-runtimes/dsh-primary-runtime/dependencies/pnpm/bin/pnpm.cjs"
cd "$HOME/.dsh/profiles/desktop"
"$NODE" "$PNPM" install --offline --no-frozen-lockfile
若提示缺包,去掉 --offline 再执行一次。确认 node_modules/dsh-float 指向插件目录。
3. 重启 DeepSeek Harness。启动成功时 dsh 日志会出现 [dsh-float] loaded 和 helper ready on 127.0.0.1:…。
卸载
从 profile package.json 删除依赖与 dsh.profile.bundles 里的 dsh-float,重新执行 pnpm install,或直接删除 node_modules/dsh-float 链接,然后重启 dsh。
使用
- 双击 dsh-pet 桌宠打开面板;再次双击、按 Esc 或点右上角「—」隐藏。拖动桌宠时不会打开。
- 拖动面板标题栏移动位置;拖右边缘 / 底边 / 右下角调整大小(最小 320×420,超出屏幕会自动限制)。
- Enter 发送,Shift+Enter 换行;回答中可点停止按钮。
- 左下角相机按钮进入框选:拖拽选区,松开完成,Esc 取消。
- 面板顶部的模型名可打开模型列表;「跟随 dsh 默认」表示使用 dsh 当前会话模型。
- 托盘图标:显示/隐藏、截图提问、退出;Alt+Space 同样可切换面板。
数据与配置
都在 ~\.dsh\dsh-float\:
| 文件 | 内容 |
| config.json | 快捷键、system prompt、模型偏好、历史轮数、autoVision |
| history.json | 最近 40 条对话(面板显示最近 12 条) |
| window.json | 面板上次的位置与大小 |
截图先保存在系统临时目录 %TEMP%\dsh-float\shot-*.png,发送后由宿主删除。
config.json 示例:
{
"hotkey": "Alt+Space",
"systemPrompt": "你是一个常驻桌面的 AI 助手……", "model": null, "maxHistoryRounds": 8, "autoVision": true, "opacity": 1 }
model: null 跟随 dsh 默认;也可以写成 {"provider": "...", "model": "..."}。删除该文件即恢复默认配置。
视觉(看图)
图片会经过两层检查:
1. 当前模型 inputModalities 含 image → 直接发送。
2. 否则在已安装的 provider 中找含 image 能力、且模型名匹配的视觉路由(优先 modlens),自动切换并提示。
3. 都没有 → 报 VISION_UNAVAILABLE,提示安装或启用 modlens,或者手动选择视觉模型。
文本模型不会对图片报错,而是把图片静默替换成占位文本,所以不能靠「发送成功」判断视觉能力。
排障
- 面板打不开 / 双击桌宠没反应:确认 dsh-pet 正在运行,且双击的是宠物本体(不是气泡里的按钮);两次点击要在系统双击间隔内、位置基本不变(拖拽桌宠不算双击)。确认 dsh 日志里有 [dsh-float] loaded。点击监听器首次运行时会用系统自带 .NET Framework 的 csc.exe 编译到 ~\.dsh\dsh-float\bin\,失败会写入 helper-debug.log,此时仍可用 Alt+Space 或托盘打开。
- 找不到 Electron / 下载失败:Helper 会在首次启动时自动下载;若下载失败(网络或代理),设置 DSH_FLOAT_ELECTRON_PATH 指向现成的 electron.exe,或安装 dsh-pet 复用它的 ~\.dsh\electron。下载与查找过程写入 helper-debug.log。
- 快捷键无效:被其他软件占用会降级并提示;以托盘菜单为准,提示文字会显示实际快捷键。
- 回答报「上一条回答还没结束」:先停止上一条;Helper 重启期间请求会超时,稍候重试。
- Helper 崩溃:宿主会自动重启,750ms 起指数退避,最多 12 次;约每 3 分钟稳定运行后重置计数。
- 截图是黑屏/失败:先升级显卡驱动;Helper 优先用屏幕流取帧,不可用时自动回退到 desktopCapturer,再失败则用 PowerShell 截屏。
- 截图遮罩没出现:Helper 会等画面绘好再显示遮罩,并在显示失败时重试;60 秒未选择区域会自动取消并恢复面板。诊断日志在 ~\.dsh\dsh-float\helper-debug.log(超过 256 KB 自动清空),其中 capture start / stream frame / overlay revealed / capture finish 记录了各阶段耗时。
- 想彻底重置:退出 dsh,删除 ~\.dsh\dsh-float\,重启。
开发与自测
语法检查
node --check runtime/electron-helper/main.js
node --check runtime/electron-helper/pet-watch.js
node --check runtime/electron-helper/window.js
node --check lib/index.js
离线预览(不碰 dsh,使用内置假模型)
env -u ELECTRON_RUN_AS_NODE "$HOME/.dsh/electron/electron.exe" \
runtime/electron-helper/main.js --mock
宿主 ↔ Helper 桥接自测:鉴权、epoch、流式、中止、退出
node tools/mock-host.mjs
渲染进程开启 contextIsolation、关闭 nodeIntegration;脚本侧使用严格 CSP(script-src 'self',无 'unsafe-inline' / 'unsafe-eval'),因为 KaTeX HTML 输出依赖行内样式,style-src 允许内联但仍禁止外部样式。模型输出逐节点构建 DOM,只有 KaTeX 生成的转义标记经 innerHTML 插入(trust: false);宿主只接受白名单临时目录里的 PNG/JPEG/WebP 截图。
截图用的屏幕流只在鼠标悬停相机按钮或开始截图时打开,取到一帧后立即关闭;选区图像只写入 %TEMP%\dsh-float,由宿主发送后删除。遮罩页使用独立 CSP(img-src data: blob:),除本地 overlay.js 外不加载任何脚本。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
18840024879/dsh-float
置顶悬浮对话面板,框选屏幕截图直接提问
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,125已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,465已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,457已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,710已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,378已汉化DSH
70.2
这是你的仓库?认领条目