在浮动窗口中养宠物,随代理状态切换姿态
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 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 40 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 艺术作品与本插件分开再分发。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
hasan-aghayev/dsh-pet-companion
在浮动窗口中养宠物,随代理状态切换姿态
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,359已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,514已汉化DSH
71.8
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,289已汉化DSH
71.6
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 92,675已汉化DSH
71.2
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,522已汉化DSH
71
这是你的仓库?认领条目