把本机 DSH 变成置顶悬浮球,随时点开对话
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add liangfeng113/dsh-float-assistant该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · model
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 9 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 12 处,展示前 12 条)
- 发起网络请求e2e-test.mjs:11
const res = await fetch(`${BASE}/api/${method}`, { - 发起网络请求electron/main.js:36
const req = http.get(WIDGET_URL + '/', { timeout: 1000 }, (res) => { - 执行外部命令来自配置/变量electron/main.js:47
serverProc = spawn(nodeCmd, ['server.mjs'], { - 读取本地文件server.mjs:66
const st = await stat(filePath); - 读取本地文件server.mjs:75
createReadStream(filePath).pipe(res); - 读取本地文件server.mjs:105
const raw = await readFile(CONFIG_PATH, 'utf8'); - 写入本地文件server.mjs:127
await writeFile(CONFIG_PATH, JSON.stringify(clean, null, 2), 'utf8'); - 发起网络请求server.mjs:155
const upstream = http.request( - 发起网络请求server.mjs:200
const upReq = http.request(DSH_ORIGIN + p + url.search, { method: 'GET', headers }); - 发起网络请求widget/app.js:80
const res = await fetch(`/api/${method}`, { - 发起网络请求widget/app.js:96
const res = await fetch('/api/widget-config'); - 发起网络请求widget/app.js:104
await fetch('/api/widget-config', {
扫描于 2026/10/31(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
把 DeepSeek Harness 变成桌面悬浮球:无边框置顶透明窗口 + 同源代理 + 流式对话,复用本机 DSH 的模型与会话(Electron + Node,无额外 API key)。
README
由 DeepSeek 最新模型翻译生成悬浮 AI 小助手 🤖
一个悬浮在屏幕上的 AI 小助手,直接接你本机正在运行的 DeepSeek Harness (DSH) ——不单独调用模型 API,不单独存 key,完全复用 DSH 的模型、工具、会话体系。
┌────────────┐ 同源 ┌──────────────────┐ 转发 ┌─────────────────┐ │ 浏览器页面 │ ─────► │ 本地代理 server.mjs │ ─────► │ DSH (127.0.0.1:3080) │ │ 悬浮球+聊天 │ 8787 │ 静态文件 + /api │ │ 会话/Agent/模型 │ └────────────┘ └──────────────────┘ └─────────────────┘
为什么需要这个代理?
DSH 的服务器没有开 CORS,浏览器页面从别的端口直接调 127.0.0.1:3080 会被同源策略拦下。
server.mjs 让页面和 API 同源(都走 8787),再原样转发给 DSH —— 事件流(SSE)也能正常推送。
启动
方式一(推荐):桌面快捷方式「悬浮AI小助手」(已安装)——双击即用。
方式二:双击项目里的 启动悬浮助手-桌面版.bat(首次运行会自动安装 Electron,走国内镜像源)。
展开完整文档(README 剩余 1 节)
悬浮 AI 小助手 🤖
一个悬浮在屏幕上的 AI 小助手,直接接你本机正在运行的 DeepSeek Harness (DSH) ——不单独调用模型 API,不单独存 key,完全复用 DSH 的模型、工具、会话体系。
┌────────────┐ 同源 ┌──────────────────┐ 转发 ┌─────────────────┐ │ 浏览器页面 │ ─────► │ 本地代理 server.mjs │ ─────► │ DSH (127.0.0.1:3080) │ │ 悬浮球+聊天 │ 8787 │ 静态文件 + /api │ │ 会话/Agent/模型 │ └────────────┘ └──────────────────┘ └─────────────────┘
为什么需要这个代理?
DSH 的服务器没有开 CORS,浏览器页面从别的端口直接调 127.0.0.1:3080 会被同源策略拦下。
server.mjs 让页面和 API 同源(都走 8787),再原样转发给 DSH —— 事件流(SSE)也能正常推送。
启动
方式一(推荐):桌面快捷方式「悬浮AI小助手」(已安装)——双击即用。
方式二:双击项目里的 启动悬浮助手-桌面版.bat(首次运行会自动安装 Electron,走国内镜像源)。
开机自启动:已安装(登录 Windows 自动启动)。想卸载:
- 删除桌面/启动文件夹里的「悬浮AI小助手」快捷方式,或
- 双击 卸载快捷方式与开机自启.bat
前提:DSH 正在运行(即 http://127.0.0.1:3080 能打开);DSH 没开时悬浮窗会自动重试连接。
说明:server.mjs 是内部服务(网页/API 同源代理),由桌面版自动拉起,不需要手动操作,也不会弹出浏览器。
使用
- 拖动悬浮球:按住拖动,放到顺手的位置
- 点击悬浮球:打开/收起聊天面板
- Enter 发送,Shift+Enter 换行,Esc 收起面板
- ■ 停止:打断当前回复(等价于 DSH 的 session.cancel)
- 右键悬浮球:退出应用
- ⚙ 绑定对话:选择要绑定的工作区,再选里面的对话。
绑定关系保存在项目根目录 config.json,重启、换浏览器都继承同一个对话。
- 点击穿透:悬浮窗透明区域不会挡住下层应用——鼠标移到悬浮球/聊天面板上才响应,移开就透传点击给下面的窗口(微信、浏览器随便点)。
- 在 DSH 网页里也能看到这同一段对话、打断它、改它的模型。
配置(环境变量)
| 变量 | 默认值 | 说明 |
| PORT | 8787 | 本地代理端口 |
| DSH_ORIGIN | http://127.0.0.1:3080 | DSH 服务地址 |
例:PORT=9000 node server.mjs
安全说明 ⚠️
- 本代理只监听 127.0.0.1,不暴露到局域网/公网。
- DSH 的 /api 本身无鉴权,安全模型是"只绑本机 + 只收 JSON"。请保持 DSH 也只监听本机 —— 不要把 3080 或 8787 端口暴露到公网,否则任何人都能指挥你的 agent。
- 页面与代理之间没有任何 token:因为你就在本机,DSH 自己保管模型 key。
技术要点(写给想改的人)
与 DSH 的通信协议(已在源码中实测验证):
发消息 POST /api/session.prompt {"type":"client-request","rpcId":"<uuid>", "method":"session.prompt",
"payload":{"sessionId":"…","mode":"queue",
"content":[{"type":"text","text":"你好"}],
"clientTimeZone":"Asia/Shanghai"}}
收事件流 WS /api/events.mux WebSocket,消息为 {…"payload":{type:"session/event",
event:{type:"assistant/chunk",data:{chunk:{type:"text-delta",text:"你"}}}}}
注:事件流必须是 WebSocket 升级(普通 GET 会被拒,HTTP 426)。
代理 server.mjs 已处理升级转发。
关键事件:user/message(用户消息)、assistant/chunk(流式增量)、 assistant/message(完整消息)、turn/end(回合结束)。
路线图
- [x] M1 悬浮球 + 绑定工作区对话 + 流式回复
- [x] M2 桌面悬浮窗版(Electron:无边框、置顶、透明、盖在任何应用上)
- [ ] 收到回复时系统通知 / 声音提醒
- [ ] 语音输入(浏览器 Web Speech API 即可)
- [ ] 快捷指令(如"截图问 AI")
- [ ] 打包成 exe 分发
目录结构
悬浮AI小助手/ ├── server.mjs # 内部服务:静态文件 + /api 代理 + WebSocket 转发 ├── 启动悬浮助手-桌面版.bat # 桌面悬浮窗启动(首次装 Electron) ├── 安装桌面快捷方式与开机自启.bat # 装桌面快捷方式 + 开机自启 ├── 卸载快捷方式与开机自启.bat # 卸掉上面两个 ├── 安装快捷方式.ps1 # 上面两个 bat 调用的脚本 ├── icon.ico # 快捷方式图标(自动生成) ├── electron/ # 桌面悬浮窗(Electron) │ ├── main.js # 主进程:窗口、拖拽、展开/收起、自愈 │ └── preload.js # 页面 ↔ 主进程桥 ├── config.json # 绑定的工作区 + 对话(自动生成) ├── e2e-test.mjs # 端到端自检脚本(node e2e-test.mjs) └── widget/ ├── index.html # 悬浮球 UI(桌面窗内部加载) ├── style.css └── app.js # 连接、绑定、流式渲染
config.json(绑定的工作区/会话 ID)在运行时生成,已列入 .gitignore。
克隆后第一次「⚙ 绑定对话」会自动重建。
许可
MIT,见 LICENSE © 2026 梁锋 (liangfeng113)。
依赖与边界:
| 部件 | 许可 | 说明 |
| 本项目代码(server.mjs、widget/、electron/) | MIT | 本仓库 |
| Electron | MIT | 由 electron/package.json 在本地安装,不随仓库分发 |
| DeepSeek Harness (DSH) | DeepSeek 官方条款 | 不包含在本仓库内,只通过本机 127.0.0.1:3080 的 HTTP/WebSocket API 与之通信 |
本仓库不含任何模型 key、cookie 或 DSH 源码;代理只监听 127.0.0.1。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
liangfeng113/dsh-float-assistant
把本机 DSH 变成置顶悬浮球,随时点开对话
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1