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

桌面宠物伴侣 hasan-aghayev/dsh-pet-companion

DeepSeek 客户端
hasan-aghayev40 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

在浮动窗口中养宠物,随代理状态切换姿态

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

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/hasan-aghayev/dsh-pet-companion.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 40 天前
档位由哪些信号合成

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 54 处,展示前 48 条)
  • 读取本地文件
    src/index.js:43
    try { return JSON.parse(await readFile(file, 'utf8')) } catch { return fallback }
  • 写入本地文件
    src/index.js:48
    await writeFile(temp, JSON.stringify(value, null, 2) + '\n', { mode: 0o600 })
  • 写入本地文件
    src/index.js:49
    await rename(temp, file)
  • 写入本地文件
    src/index.js:146
    await mkdir(userLibrary, { recursive: true })
  • 写入本地文件
    src/index.js:147
    await mkdir(requestDir, { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/index.js:148
    await mkdir(resultDir, { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/index.js:149
    await mkdir(path.dirname(stateFile), { recursive: true })
  • 读取本地文件
    src/index.js:216
    try { files = await readdir(requestDir) } catch { return }
  • 删除本地文件
    src/index.js:237
    await rm(claimedPath, { force: true }).catch(() => {})
  • 删除本地文件
    src/index.js:269
    await rm(stateFile, { force: true }).catch(() => {})
  • 发起网络请求
    client.js:41
    const response = await fetch(PATH, { method: 'GET', cache: 'no-store', credentials: 'same-origin' })
  • 发起网络请求
    client.js:72
    const response = await fetch(PATH, {
  • 读取本地文件
    src/pets.js:24
    const manifest = JSON.parse(await readFile(manifestFile, 'utf8'))
  • 读取本地文件
    src/pets.js:37
    dimensions = imageSize(await readFile(imagePath))
  • 读取本地文件
    src/pets.js:44
    dimensions = imageSize(await readFile(imagePath))
  • 读取本地文件
    src/pets.js:52
    const imageStat = await stat(imagePath)
  • 读取本地文件
    src/pets.js:70
    try { entries = await readdir(root, { withFileTypes: true }) } catch (error) {
  • 读取本地文件
    src/data-root.js:6
    await access(target)
  • 写入本地文件
    src/data-root.js:18
    await mkdir(path.dirname(currentRoot), { recursive: true })
  • 写入本地文件
    src/data-root.js:20
    await rename(legacyRoot, currentRoot)
  • 写入本地文件
    src/data-root.js:24
    await mkdir(currentRoot, { recursive: true })
  • 写入本地文件
    src/data-root.js:35
    await mkdir(currentRoot, { recursive: true })
  • 读取本地文件
    src/runtime.js:22
    try { await access(binary); return binary } catch {}
  • 写入本地文件
    src/runtime.js:24
    await mkdir(cacheRoot, { recursive: true })
  • 写入本地文件
    src/runtime.js:33
    await mkdir(staging, { recursive: true })
  • 写入本地文件
    src/runtime.js:36
    if (platform !== 'win32') await chmod(electronBinary(staging, platform), 0o755).catch(() => {})
  • 写入本地文件
    src/runtime.js:37
    await rename(staging, installRoot)
  • 删除本地文件递归
    src/runtime.js:39
    await rm(staging, { recursive: true, force: true }).catch(() => {})
  • 读取本地文件
    src/runtime.js:40
    try { await access(binary); return binary } catch {}
  • 读取本地文件
    src/runtime.js:43
    await access(binary)
  • 执行外部命令固定命令
    src/runtime.js:48
    return execFileSync('powershell.exe', [
  • 执行外部命令固定命令
    src/runtime.js:55
    return execFileSync('wslpath', ['-w', linuxPath], { encoding: 'utf8', timeout: 5000 }).trim()
  • 执行外部命令固定命令
    src/runtime.js:65
    const linuxLocalAppData = execFileSync('wslpath', ['-u', localAppData], { encoding: 'utf8', timeout: 5000 }).trim()
  • 写入本地文件
    src/runtime.js:72
    await mkdir(stagedRoot, { recursive: true })
  • 写入本地文件
    src/runtime.js:76
    await copyFile(path.join(PLUGIN_ROOT, 'package.json'), path.join(stagedRoot, 'package.json'))
  • 删除本地文件递归
    src/runtime.js:79
    await rm(dependencyTarget, { recursive: true, force: true })
  • 读取本地文件
    src/runtime.js:80
    await cp(await realpath(path.join(PLUGIN_ROOT, 'node_modules', 'image-size')), dependencyTarget, { recursive: true, force: true, dereference: true })
  • 执行外部命令来自配置/变量
    src/runtime.js:106
    const child = spawn(binary, args, { detached: false, stdio: ['ignore', 'ignore', 'pipe'], windowsHide: true })
  • 读取本地文件
    desktop/main.cjs:36
    language, JSON.parse(fsSync.readFileSync(path.join(__dirname, 'locales', language + '.json'), 'utf8')),
  • 写入本地文件
    desktop/main.cjs:71
    fsSync.mkdirSync(electronData, { recursive: true, mode: 0o700 })
  • 读取本地文件
    desktop/main.cjs:116
    try { return JSON.parse(await fs.readFile(file, 'utf8')) } catch { return fallback }
  • 执行外部命令固定命令
    desktop/main.cjs:270
    child = spawn('powershell.exe', ['-NoLogo', '-NoProfile', '-NonInteractive', '-Command', buildNativeDragScript()], {
  • 删除本地文件
    desktop/main.cjs:372
    await fs.rm(path.join(promptResultsDir, requestId + '.json'), { force: true }).catch(() => {})
  • 写入本地文件
    desktop/main.cjs:420
    fs.mkdir(dataRoot, { recursive: true }).then(() => fs.writeFile(boundsFile, JSON.stringify(petWindow.getBounds()))).catch(() => {})
  • 写入本地文件
    desktop/main.cjs:480
    await fs.mkdir(path.dirname(settingsFile), { recursive: true })
  • 写入本地文件
    desktop/main.cjs:481
    await fs.writeFile(settingsFile, JSON.stringify(settings, null, 2) + '\n', { mode: 0o600 })
  • 写入本地文件
    desktop/main.cjs:507
    await fs.mkdir(libraryDir, { recursive: true })
  • 写入本地文件
    desktop/main.cjs:546
    await fs.mkdir(promptRequestsDir, { recursive: true, mode: 0o700 })
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 浮动窗口养宠物
  • 随代理状态切换姿态
  • 本地宠物库扩充

DeepSeek Harness 桌面悬浮宠物,本地宠物库持续扩充

README

由 DeepSeek 最新模型翻译生成
DSH 宠物伴侣 一个用于 DeepSeek Harness 的浮动桌面宠物。它会在单独的透明窗口中响应代理活动,并包含一个基于文件夹的库,用于从动画图集或透明肖像添加宠物。内置合集目前包含 Lokki 和 Professor Leo,基于文件夹的库支持添加更多宠物。 截图 伴侣与悬停控件英文设置简体中文设置 Professor Leo 内置宠物 Professor Leo 是一只好奇的狮子科学家,拥有铜色鬃毛、青色眼镜和白色实验服。他为伴侣合集带来了一位研究者好奇而深思熟虑的个性。他的名字和描述会跟随 DSH 的英文或简体中文区域设置。 功能 - 在独立的可移动桌面窗口中显示所选宠物,即使 DSH 最小化时也是如此。 - 随着 DSH 代理事件的变化,在空闲、工作、等待或审查以及错误姿态之间切换。 - 提供悬停控件,包括设置、文本编辑器和关闭宠物。右键单击宠物会打开一个菜单,包含设置、下一只宠物和关闭宠物。 - 允许通过 DSH 侧边栏的 显示宠物 开关隐藏或恢复伴侣,同时保持插件启用。关闭宠物也会关闭此开关。 - 提供外观、语言、大小、不透明度、始终置顶、减少动态效果和游走设置。 - 默认跟随 DSH 的英文或中文区域设置;语言也可以在设置中选择。 - 包含 Lokki(一只铜色科技狐狸)和 Professor Leo(一只好奇的狮子科学家)。
展开完整文档(README 剩余 1 节)
DSH 宠物伴侣

一个用于 DeepSeek Harness 的浮动桌面宠物。它会在单独的透明窗口中响应代理活动,并包含一个基于文件夹的库,用于从动画图集或透明肖像添加宠物。内置合集目前包含 Lokki 和 Professor Leo,基于文件夹的库支持添加更多宠物。

截图

伴侣与悬停控件英文设置简体中文设置 Professor Leo

内置宠物

Professor Leo 是一只好奇的狮子科学家,拥有铜色鬃毛、青色眼镜和白色实验服。他为伴侣合集带来了一位研究者好奇而深思熟虑的个性。他的名字和描述会跟随 DSH 的英文或简体中文区域设置。

功能

- 在独立的可移动桌面窗口中显示所选宠物,即使 DSH 最小化时也是如此。
- 随着 DSH 代理事件的变化,在空闲、工作、等待或审查以及错误姿态之间切换。
- 提供悬停控件,包括设置、文本编辑器和关闭宠物。右键单击宠物会打开一个菜单,包含设置、下一只宠物和关闭宠物。
- 允许通过 DSH 侧边栏的 显示宠物 开关隐藏或恢复伴侣,同时保持插件启用。关闭宠物也会关闭此开关。
- 提供外观、语言、大小、不透明度、始终置顶、减少动态效果和游走设置。
- 默认跟随 DSH 的英文或中文区域设置;语言也可以在设置中选择。
- 包含 Lokki(一只铜色科技狐狸)和 Professor Leo(一只好奇的狮子科学家)。两者都附带 Hatch-Pet v2 动画图集以及英文和简体中文标签。
- 无需重新构建或重新安装插件即可加载额外的宠物文件夹。无需创建动画图集即可使用单个透明肖像。

安装与移除

dsh plugin --profile web add github:hasan-aghayev/dsh-pet-companion

将 web 更改为你使用的 DSH 配置文件。首次启动时,伴侣会下载其固定版本的 Electron 运行时并打开一个桌面窗口。需要图形桌面;WSL2 用户需要启用 WSLg。

要移除插件:

dsh plugin --profile web remove dsh-pet-companion

在 DSH 中禁用该插件会停止其桌面进程,但会保留安装。使用 Show pet 隐藏宠物只会改变可见性。移除后,宠物文件和偏好设置仍保留在 $DSH_HOME/pet-companion 下,因此如果你再次安装该插件,它们仍然可用。

设置与控制

使用齿轮按钮或双击宠物打开设置。使用 DSH 侧边栏中的 Show pet 可将隐藏的伙伴重新显示出来。Close pet 控件会隐藏伙伴并关闭 Show pet;插件仍保持启用状态。

文本输入框会通过 DSH 的公共 agent API 将输入的消息发送到最近活跃的实时 DSH 会话。它不会显示会话选择器。按 Enter 发送,按 Shift+Enter 添加一行。

添加另一个宠物

从设置中打开 Pet library 文件夹。为每个宠物添加一个文件夹,其中包含 pet.json 清单及其美术资源。文件夹名称必须与清单的 id 匹配。新文件夹会在几秒内被自动发现;Refresh 会立即重新扫描库。

Hatch-Pet v2 动画图集

使用 1536 x 2288 像素的图集(8 列 x 11 行),并将 spriteVersionNumber 设置为 2: json { "id": "miso", "displayName": "Miso", "description": "A small lunar cat.", "spriteVersionNumber": 2, "spritesheetPath": "spritesheet.webp" }

可选的 displayNameZh 和 descriptionZh 字段提供简体中文标签。Hatch-Pet v2 使用其标准动画行,包括 idle、walking、waving、jumping、failed、waiting、working 和 review 姿势,以及 16 个注视方向。

透明肖像

可以使用单个 PNG 或 WebP,而无需动画图集。肖像会有轻柔的呼吸动作: json { "id": "miso-portrait", "displayName": "Miso", "description": "A portrait with gentle motion.", "format": "portrait", "imagePath": "portrait.png" }

名称可以使用小写字母、数字和连字符。图像路径必须保持在宠物文件夹内。图像不得大于 25 MiB;肖像尺寸最大可为 4096 x 4096 像素。内置宠物 ID 为保留项。

数据与隐私

宠物美术资源、偏好设置、窗口位置和会话 ID 都保留在本地机器上。该插件会观察 DSH agent 生命周期以及审批或问题事件,以选择动画。它不会读取对话文本、文件或凭据。从输入框提交的文本仅通过 DSH 的公共 agent API 发送到选定的实时 DSH 会话。该插件在首次启动时下载固定版本的 Electron 运行时,除此之外自身不会发起其他网络请求。

开发 sh
pnpm install
pnpm check

该包包含可直接运行的 JavaScript 和静态桌面文件,因此不需要安装时构建脚本。根 package.json 在 cordis.patch.yml 中声明了 dsh.bundle 清单。

许可证麻省理工学院。Lokki 精灵图经其创作者 Hasan Aghayev 许可包含在内。Professor Leo 精灵图是为本仓库生成的,并包含在插件包中。未经许可,请勿将 Lokki 艺术作品与本插件分开再分发。
预览分享卡片长什么样 ↓hasan-aghayev/dsh-pet-companion
分享 · DeepSeek Harness Hub
hasan-aghayev/dsh-pet-companion

在浮动窗口中养宠物,随代理状态切换姿态

这是你的仓库?认领条目

回到顶部