让桌面宠物在久坐、缺水和深夜时轻声提醒你
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Oliveryfaso/dsh-pet-company该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 42 处,展示前 42 条)
- 发起网络请求client.js:404
const poll=async()=>{try{if(document.hidden){view?.destroy();view=null;signature='';return;}const res=await fetch('/pet-company-runtime/view?visible=1 - 发起网络请求client.js:457
var response = await fetch('/dsh-pet-company/' + path, { method: method || 'GET', credentials: 'same-origin', headers: body === undefined ? { Accept: - 发起网络请求src/renderer-bridge.js:83
const state=await this.request('state'); - 发起网络请求src/renderer-bridge.js:85
const entries=await this.request('config'); - 发起网络请求src/renderer-bridge.js:91
broadcast(pet,text,feedback) { return this.request('broadcast',{pet,text,...feedback===undefined?{}:{feedback}}); } - 发起网络请求src/renderer-bridge.js:94
const entries=await this.request('config'); - 发起网络请求src/renderer-bridge.js:97
if(entry?.animations?.categories?.some(category=>category.actions?.includes('care')))await this.request('anim',{pet,name:'care',...extra}); - 发起网络请求src/renderer-bridge.js:161
async fetch(request) { - 读取本地文件src/runtime-provider.js:48
const value=JSON.parse(await readFile(candidate,'utf8')); - 写入本地文件src/runtime-provider.js:58
await mkdir(dirname(file),{recursive:true});const temporary=file+'.'+randomUUID()+'.tmp'; - 写入本地文件src/runtime-provider.js:59
try {await writeFile(temporary,JSON.stringify(config,null,2)+'\n',{mode:0o600,flag:'wx'});await rename(temporary,file);} - 写入本地文件src/runtime-provider.js:59
try {await writeFile(temporary,JSON.stringify(config,null,2)+'\n',{mode:0o600,flag:'wx'});await rename(temporary,file);} - 删除本地文件src/runtime-provider.js:60
finally {await rm(temporary,{force:true});} - 写入本地文件src/owned/owner-lock.js:6
async acquire(){await mkdir(dirname(this.file),{recursive:true});try{await writeFile(this.file,JSON.stringify({token:this.token,pid:process.pid})+'\n' - 写入本地文件src/owned/owner-lock.js:6
async acquire(){await mkdir(dirname(this.file),{recursive:true});try{await writeFile(this.file,JSON.stringify({token:this.token,pid:process.pid})+'\n' - 读取本地文件src/owned/owner-lock.js:6
async acquire(){await mkdir(dirname(this.file),{recursive:true});try{await writeFile(this.file,JSON.stringify({token:this.token,pid:process.pid})+'\n' - 写入本地文件src/owned/owner-lock.js:12
try{await writeFile(gate,this.token,{flag:'wx',mode:0o600});held=true;}catch(e){if(e.code==='EEXIST')throw Error('已有恢复操作或遗留恢复锁,请先停止相关 Profile 并检查');th - 读取本地文件src/owned/owner-lock.js:13
const text=await readFile(this.file,'utf8');if(text.length>4096)throw Error('锁状态无法确认,请保留原文件');const owner=JSON.parse(text); - 读取本地文件src/owned/owner-lock.js:16
if(await readFile(this.file,'utf8')!==text)throw Error('锁已改变');await unlink(this.file);await this.acquire(); - 删除本地文件src/owned/owner-lock.js:16
if(await readFile(this.file,'utf8')!==text)throw Error('锁已改变');await unlink(this.file);await this.acquire(); - 删除本地文件src/owned/owner-lock.js:17
}finally{if(held)await unlink(gate);} - 读取本地文件src/owned/owner-lock.js:19
async release(){await this.ready;if(!this.owned)return;try{const text=await readFile(this.file,'utf8');if(JSON.parse(text).token===this.token)await un - 删除本地文件src/owned/owner-lock.js:19
async release(){await this.ready;if(!this.owned)return;try{const text=await readFile(this.file,'utf8');if(JSON.parse(text).token===this.token)await un - 写入本地文件src/owned/helper-manager.js:13
await mkdir(join(this.home,'dsh-pet-company/runtime/user-data'),{recursive:true});this.phase='starting';this.reason='正在启动独立伴侣'; - 读取本地文件src/owned/runtime-source.js:11
async executable(){if(this.phase==='unverified')return null;const file=this.configuredExecutable??join(this.cache,'Electron.app/Contents/MacOS/Electro - 读取本地文件src/owned/runtime-source.js:14
this.inflight=(async()=>{const archive='electron-v'+VERSION+'-darwin-arm64.zip',base='https://github.com/electron/electron/releases/download/v'+VERSIO - 写入本地文件src/owned/runtime-source.js:14
this.inflight=(async()=>{const archive='electron-v'+VERSION+'-darwin-arm64.zip',base='https://github.com/electron/electron/releases/download/v'+VERSIO - 写入本地文件src/owned/runtime-source.js:14
this.inflight=(async()=>{const archive='electron-v'+VERSION+'-darwin-arm64.zip',base='https://github.com/electron/electron/releases/download/v'+VERSIO - 删除本地文件递归src/owned/runtime-source.js:14
this.inflight=(async()=>{const archive='electron-v'+VERSION+'-darwin-arm64.zip',base='https://github.com/electron/electron/releases/download/v'+VERSIO - 写入本地文件src/owned/runtime-source.js:14
this.inflight=(async()=>{const archive='electron-v'+VERSION+'-darwin-arm64.zip',base='https://github.com/electron/electron/releases/download/v'+VERSIO - 发起网络请求src/bridge.js:29
const state=await this.request('state'); - 发起网络请求src/bridge.js:32
const entries=await this.request('config'); - 发起网络请求src/bridge.js:39
broadcast(pet,text) { return this.request('broadcast?pet='+encodeURIComponent(pet),{text}); } - 发起网络请求src/bridge.js:41
const entries=await this.request('config'); - 发起网络请求src/bridge.js:43
if (entry?.animations?.categories?.some(c=>c.actions?.includes('care'))) await this.request('anim?pet='+encodeURIComponent(pet),{name:'care'}); - 读取本地文件src/owned/config.js:7
const pack=JSON.parse(await readFile(new URL('../../pet/'+id+'-config.json',import.meta.url),'utf8')),a=validateAppearance(appearance); - 读取本地文件src/owned/assets.js:8
const root=await realpath(new URL('../../pet/'+id+'-animation/',import.meta.url)); - 读取本地文件src/owned/assets.js:10
if(await realpath(file)!==root+'/'+name+'.webm')throw Error('素材必须是包内文件'); - 读取本地文件src/owned/assets.js:11
const info=await stat(file);if(!info.isFile()||info.size>16*1024*1024)throw Error('素材范围无效'); - 读取本地文件src/owned/assets.js:12
return {bytes:await readFile(file),type:'video/webm',file}; - 发起网络请求src/client-entry.js:53
var response = await fetch('/dsh-pet-company/' + path, { method: method || 'GET', credentials: 'same-origin', headers: body === undefined ? { Accept: - 发起网络请求src/owned/client.js:4
const poll=async()=>{try{if(document.hidden){view?.destroy();view=null;signature='';return;}const res=await fetch('/pet-company-runtime/view?visible=1
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-home-paths@deepseek-ai/schemastery@deepseek-ai/dsh-client-connection给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 桌面宠物陪伴插件:轻量关怀提醒与 Q 版角色交互,开发中。角色美术另遵循 CC BY-NC 4.0。
README
由 DeepSeek 最新模型翻译生成dsh-pet-company
给 dsh-pet 加上几句关心:坐久了起来走走,水杯空了续一下,深夜了早点收工。默认安静,其余时间陪你慢慢写代码。
银白龙娘、橙书娘与蓝鲸女仆三套 Q 版角色预览
美术来自 fywdy,为非官方同人,采用 CC BY-NC 4.0:非商用,须署名。橙色角色按用户选择使用正常比例的阅读动作待机。
当前为开发版。已在 DSH Desktop 2.0.17 / DSH 0.2.0-rc.2 的隔离 Profile 验证官方通信、设置保存、显式关怀和云朵气泡;透明浮窗与跨屏等边界单独记录。 最新范围见 兼容性。 用户反馈后的播放器修复已做三宠顺序原生抽查,采样中未复现周期变淡或橙发变扁;源动画仍有分帧感,跨应用焦点、点击穿透和多屏等边界尚未完整验收;取证与修复范围。
它会做什么
- 久坐、喝水、连续工作与深夜提醒,分别可以关闭。
- 默认安静档每滚动小时最多一句;支持频率、静默时段和「安静一小时」。
- 审批、提问等待期间不插话,缺少 dsh-pet 或目标宠物时显示原因并保持安静。
- 「设置 → 陪伴」保存配置;「试说一句(会显示气泡)」可检查目标宠物。
- 可选 dsh-pet 0.3.7 兼容补丁 提供三色云朵、轻回弹与原桌宠页的外观设置;安装本插件不会自动改写依赖。独立演示和验证见 反馈模块。
展开完整文档(README 剩余 1 节)
dsh-pet-company 给 dsh-pet 加上几句关心:坐久了起来走走,水杯空了续一下,深夜了早点收工。默认安静,其余时间陪你慢慢写代码。 银白龙娘、橙书娘与蓝鲸女仆三套 Q 版角色预览 美术来自 fywdy,为非官方同人,采用 CC BY-NC 4.0:非商用,须署名。橙色角色按用户选择使用正常比例的阅读动作待机。 当前为开发版。已在 DSH Desktop 2.0.17 / DSH 0.2.0-rc.2 的隔离 Profile 验证官方通信、设置保存、显式关怀和云朵气泡;透明浮窗与跨屏等边界单独记录。 最新范围见 兼容性。 用户反馈后的播放器修复已做三宠顺序原生抽查,采样中未复现周期变淡或橙发变扁;源动画仍有分帧感,跨应用焦点、点击穿透和多屏等边界尚未完整验收;取证与修复范围。 它会做什么 - 久坐、喝水、连续工作与深夜提醒,分别可以关闭。 - 默认安静档每滚动小时最多一句;支持频率、静默时段和「安静一小时」。 - 审批、提问等待期间不插话,缺少 dsh-pet 或目标宠物时显示原因并保持安静。 - 「设置 → 陪伴」保存配置;「试说一句(会显示气泡)」可检查目标宠物。 - 可选 dsh-pet 0.3.7 兼容补丁 提供三色云朵、轻回弹与原桌宠页的外观设置;安装本插件不会自动改写依赖。独立演示和验证见 反馈模块。 本插件负责关怀调度,宠物窗口、动作播放、大小、位置、走动与余额显示仍由 dsh-pet 负责。本插件不调用模型、不读取键盘输入,也不采集健康数据。 开始使用 先阅读 安装与卸载:Desktop 通过应用自己的插件管理入口;已验证的 Web 路线可使用独立的自定义 profile。需要在同一 profile 安装并启用 dsh-pet。 三套角色素材位于 pet/,需单独导入 dsh-pet。安装关怀插件不会自动改写已有桌宠;也可以先对默认 main 宠物说话。 | 角色 | 目标宠物 ID | 默认待机 | | 银白龙娘 | companion-silver | 源 idle | | 橙书娘 | companion-orange | 源 review,1030 ms 循环 | | 蓝鲸女仆 | companion-tide | 源 idle | 「角色」选择台词语气,「宠物 ID」选择说话目标,两者独立。 开发检查 开发检查需要 Node.js 22.13+(播放器源码回归使用 Node 内置的 TypeScript 类型擦除;运行插件的 JS 下限仍见 package.json)。核心与组件契约测试不需要安装 npm 依赖: npm test npm run check npm pack --dry-run --ignore-scripts --offline CI 检查测试、JavaScript 语法和包清单,不启动 DSH、不生成美术、不等同于 Desktop 验收。重新生成素材需要另外准备美术工具,日常运行使用已生成的视频。 许可与来源 自有插件代码、测试和构建工具采用 MIT。随包角色美术另受 CC BY-NC 4.0 的非商用限制,整个素材包不能按纯 MIT 使用;总范围见 LICENSE。 fywdy 的图集、派生透明动画与预览为 CC BY-NC 4.0;上游脚本和 JSON 的 MIT 许可不覆盖美术。角色并非任何品牌的官方形象,也未获得品牌授权、赞助或背书。本项目不宣称这些素材为自行原创手绘。 完整署名、来源与修改说明见 第三方说明、美术许可 和 上游资料。市场收录准备见 市场说明。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Oliveryfaso/dsh-pet-company
让桌面宠物在久坐、缺水和深夜时轻声提醒你
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,111已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,341已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,449已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,532已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,353已汉化DSH
70.2
这是你的仓库?认领条目