🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

桌面悬浮球 liangfeng113/dsh-float-assistant

DeepSeek Harness
liangfeng1139 天前有提交已提供中文文档扫描:含敏感能力

把本机 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 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。
预览分享卡片长什么样 ↓liangfeng113/dsh-float-assistant
分享 · DeepSeek Harness Hub
liangfeng113/dsh-float-assistant

把本机 DSH 变成置顶悬浮球,随时点开对话

回到顶部