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

桌宠局域网联机 Hamster1214/dsh-pet-lan

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

在同一 Wi-Fi 下互相看到并逗玩对方的桌宠

29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Hamster1214/dsh-pet-lan
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · desktop
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 37 处,展示前 29 条)
  • 写入本地文件
    lib/index.js:408
    await mkdir(dshHome(), { recursive: true })
  • 写入本地文件
    lib/index.js:410
    await writeFile(tmp, JSON.stringify(config, null, 2) + '\n', 'utf8')
  • 写入本地文件
    lib/index.js:411
    await rename(tmp, configPath)
  • 读取本地文件
    lib/index.js:421
    const parsed = JSON.parse(await readFile(configPath, 'utf8'))
  • 读取本地文件
    lib/index.js:475
    const doc = JSON.parse(readFileSync(join(dshHome(), 'dsh-pet', 'desktop-live.json'), 'utf8'))
  • 读取本地文件
    lib/index.js:531
    if (typeof explicit === 'string' && explicit !== '' && existsSync(explicit)) return explicit
  • 读取本地文件
    lib/index.js:538
    return existsSync(candidate) ? candidate : undefined
  • 读取本地文件
    lib/index.js:550
    if (existsSync(join(candidate, 'package.json'))) return candidate
  • 读取本地文件
    lib/index.js:567
    if (candidate !== undefined && existsSync(candidate)) return candidate
  • 写入本地文件
    lib/index.js:621
    writeFileSync(desktopStatePath, JSON.stringify({
  • 写入本地文件
    lib/index.js:645
    writeFileSync(desktopMovesPath, '', 'utf8')
  • 写入本地文件
    lib/index.js:750
    writeFileSync(desktopStatePath, JSON.stringify({
  • 执行外部命令来自配置/变量
    lib/index.js:757
    child = spawn(electron, [main], {
  • 执行外部命令固定命令
    lib/index.js:843
    spawn('taskkill', ['/pid', String(current.pid), '/t', '/f'], { windowsHide: true, stdio: 'ignore' })
  • 发起网络请求
    client.js:212
    fetch(DUCK_PRESS_URL, { credentials: 'same-origin', cache: 'force-cache' }).then((r) => {
  • 发起网络请求
    client.js:216
    fetch(DUCK_RELEASE_URL, { credentials: 'same-origin', cache: 'force-cache' }).then((r) => {
  • 发起网络请求
    client.js:278
    const response = await fetch(path, {
  • 发起网络请求
    client.js:308
    localConfigPromise = fetch(PET_CONFIG_URL, { credentials: 'same-origin', cache: 'no-store' })
  • 发起网络请求
    client.js:466
    const response = await fetch('/api/pet-lan' + query, {
  • 发起网络请求
    client.js:564
    const response = await fetch(petAssetUrl(assetRoot, anim, ext), {
  • 读取本地文件
    runtime/desktop-helper/main.cjs:279
    raw = fs.readFileSync(stateFile, 'utf8')
  • 写入本地文件
    runtime/desktop-helper/main.cjs:325
    fs.appendFileSync(movesFile, JSON.stringify({ key: entry.key, x: bounds.x, y: bounds.y, at: Date.now() }) + '\n')
  • 读取本地文件
    runtime/shared/local-pet-link.cjs:26
    try { descriptor = JSON.parse(fs.readFileSync(file, 'utf8')) } catch { status(); return }
  • 写入本地文件
    runtime/shared/native-bridge.cjs:66
    fs.mkdirSync(path.dirname(file), { recursive: true })
  • 写入本地文件
    runtime/shared/native-bridge.cjs:67
    fs.writeFileSync(file, JSON.stringify({ protocol: 1, port: server.address().port, token, pid: process.pid }), { mode: 0o600 })
  • 读取本地文件
    runtime/shared/native-bridge.cjs:76
    try { if (JSON.parse(fs.readFileSync(file, 'utf8')).token === token) fs.unlinkSync(file) } catch {}
  • 发起网络请求
    runtime/shared/pet-core.cjs:1117
    const res = await fetch(baseUrl, {
  • 发起网络请求
    runtime/shared/pet-core.cjs:1787
    const res = await fetch(url, { cache: "no-store" });
  • 发起网络请求
    runtime/shared/pet-core.cjs:1923
    const res = await fetch(baseUrl, {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

大肥鱼桌宠联机

README

由 DeepSeek 最新模型翻译生成
dsh-pet-lan · 桌宠联机 给已安装的 dsh-pet 0.3.7 加一个局域网联机层:同一 Wi-Fi / 局域网里,装了本插件的 DSH 会互相广播桌宠,远端桌宠显示在桌面透明小窗或 DSH 浏览器浮层里,可以打招呼、点击挤压、拖拽抛掷,位置自动保存。 需要 dsh-pet 0.3.7(带 /dsh-pet-7340 路由的版本),并且桌宠已经可见。 本插件不修改 DSH 本体;可选的实时状态补丁会修改 dsh-pet 的运行时文件,详见下文。 点击/拖拽/抛掷只作用于插件显示的远端桌宠;本机自己的 dsh-pet 不在控制范围内。 功能 - 局域网发现:UDP 广播,同一房间名 + 端口的 DSH 互相可见,不经过任何外部服务器。 - 远端桌宠:桌面透明小窗(默认)或 DSH 窗口内浮层;可拖拽、抛掷,桌面窗口位置按 peer 保存。 - 点击挤压 + 小黄鸭音效:点击远端桌宠会上下挤压一下,并用 Web Audio 合成一声小黄鸭吱吱声(不需要额外音频文件)。 - 拖拽 / 抛掷 / 反弹:按住拖动,松手按拖动速度抛出;桌宠受重力下落,碰到屏幕边缘/地面会反弹并逐渐停下。桌面窗口和浏览器浮层都支持;桌面窗口位置会持久化,浏览器浮层位置在本次会话内保留。
展开完整文档(README 剩余 1 节)
dsh-pet-lan · 桌宠联机

给已安装的 dsh-pet 0.3.7 加一个局域网联机层:同一 Wi-Fi / 局域网里,装了本插件的 DSH 会互相广播桌宠,远端桌宠显示在桌面透明小窗或 DSH 浏览器浮层里,可以打招呼、点击挤压、拖拽抛掷,位置自动保存。

需要 dsh-pet 0.3.7(带 /dsh-pet-7340 路由的版本),并且桌宠已经可见。
本插件不修改 DSH 本体;可选的实时状态补丁会修改 dsh-pet 的运行时文件,详见下文。
点击/拖拽/抛掷只作用于插件显示的远端桌宠;本机自己的 dsh-pet 不在控制范围内。

功能

- 局域网发现:UDP 广播,同一房间名 + 端口的 DSH 互相可见,不经过任何外部服务器。
- 远端桌宠:桌面透明小窗(默认)或 DSH 窗口内浮层;可拖拽、抛掷,桌面窗口位置按 peer 保存。
- 点击挤压 + 小黄鸭音效:点击远端桌宠会上下挤压一下,并用 Web Audio 合成一声小黄鸭吱吱声(不需要额外音频文件)。
- 拖拽 / 抛掷 / 反弹:按住拖动,松手按拖动速度抛出;桌宠受重力下落,碰到屏幕边缘/地面会反弹并逐渐停下。桌面窗口和浏览器浮层都支持;桌面窗口位置会持久化,浏览器浮层位置在本次会话内保留。
- 名字标签 / 打招呼:点击名字标签上的 👋 按钮,对方桌宠会说一句短问候并播放动作;点击宠物本体只做挤压/音效,不会误发打招呼。
- 实时动作 / 气泡 / 表情包(可选):运行附带的补丁后,对方的动画、折叠气泡和表情包会同步过来;不跑补丁也能联机,只是远端宠物本地随机动作、没有实时气泡。
- 设置页「桌宠联机」:显示方式(桌面 / 浏览器 / 两者)、房间名、端口、气泡共享、是否接受打招呼、在线列表、桌面窗口状态与收发诊断。
- 浏览器回退:没有 Electron 或桌面 helper 启动失败时,自动在 DSH 窗口内显示远端桌宠。

安装

1. 先装 dsh-pet

在 DSH 插件市场安装并启用 dsh-pet 0.3.7,确认桌宠正常显示。

2. 安装本插件

在插件市场搜索 dsh-pet-lan 安装,或者:

dsh plugin --profile web add dsh-pet-lan

桌面应用把 web 换成 desktop。

3. 配置

打开 设置 → 桌宠联机:

- 房间名 / 端口:同一局域网的设备必须填相同值(默认 dsh-pet / 41234,可自行修改)。
- 显示方式:桌面窗口(默认,需要 Electron)、浏览器浮层,或两者。
- 广播气泡文字:关闭后只同步动作和位置,不广播气泡文本。
- 接受打招呼:关闭后忽略别人发来的挥手。

4. 可选:实时状态补丁

实时动作 / 气泡 / 表情包同步需要给 dsh-pet 打一个小补丁(不是自动执行的):

node <插件目录>\scripts\patch-dsh-pet.mjs

补丁会修改 dsh-pet 的 4 个运行时文件:

- lib/client.js
- runtime/electron-helper/preload.js
- runtime/electron-helper/main.js
- runtime/electron-helper/sprite.js

原文件会备份为 .dsh-pet-lan.bak。补丁是幂等的,dsh-pet 升级后需要重新运行一次。

安全提示:这是对另一个 npm 包的原地修改。运行前请确认你信任本插件,并保留备份;如果不想修改 dsh-pet,跳过这一步,联机功能仍然可用。恢复时把对应的 .dsh-pet-lan.bak 改回原名即可。

安全 / 隐私

- 联机数据走局域网 UDP 明文广播,没有加密,也没有身份认证;房间名不是密码,同一局域网内知道房间名的人可以伪造桌宠或发送打招呼。
- 广播内容:桌宠名称、主机名、视口、桌宠位置;开启“广播气泡文字”时还包括气泡文本(可能包含对话内容)和表情包名。
- 只建议在可信的专用局域网使用;不要在公共 Wi-Fi 上开启。
- 不接受来自非回环地址的 HTTP 控制请求;UDP 侧有 peer 数量、每 IP 包速率和全局限流。
- 不访问外部网络、不上传遥测;所有状态文件都在 $DSH_HOME 下。
- 可选的 dsh-pet 补丁会修改另一个包的运行时文件;这是本插件唯一的“包外写入”,已在上面单独说明。

更完整的威胁模型见 SECURITY.md。

显示方式

- 桌面窗口:每个远端桌宠一个透明、置顶、可拖拽的小窗;鼠标不在桌宠上时点击穿透。需要 Electron(dsh-pet 桌面模式安装时通常已下载到 $DSH_HOME/electron)。
- 浏览器浮层:远端桌宠显示在 DSH 窗口内,适合没有 Electron 的环境。
- 两者:同时显示。

Electron 缺失或桌面 helper 启动失败时自动退回浏览器浮层;设置页会显示错误原因。

Windows 防火墙

首次运行可能弹出防火墙提示:允许专用网络的 UDP 入站(默认端口 41234)。如果点了取消,用管理员 PowerShell 补一条:

New-NetFirewallRule -DisplayName "dsh-pet-lan" -Direction Inbound -Protocol UDP -LocalPort 41234 -Action Allow -Profile Private

协议

- UDP 广播,默认端口 41234,约每 1500 ms 一次 presence,6.5 秒无消息即下线。
- 房间名过滤;presence 里带桌宠列表、主机名、视口和可选实时状态。
- 挥手是单播 wave 消息;收到后在本地调用 dsh-pet 的 /broadcast 和 /anim。
- 协议版本 v: 1;实现见 lib/index.js。

卸载 / 回退

1. 在插件市场或 profile 里移除 dsh-pet-lan。
2. 如果运行过实时状态补丁,把 dsh-pet 下的 .dsh-pet-lan.bak 恢复为原文件名。
3. 配置文件在 $DSH_HOME/dsh-pet-lan.json,可删除。

兼容性

- DSH 0.2.1-rc.2(已测试)
- dsh-pet 0.3.7
- Node.js 22+

许可证

MIT
预览分享卡片长什么样 ↓Hamster1214/dsh-pet-lan
分享 · DeepSeek Harness Hub
Hamster1214/dsh-pet-lan

在同一 Wi-Fi 下互相看到并逗玩对方的桌宠

这是你的仓库?认领条目

回到顶部