把 Coopanion 的桌宠接进 DeepSeek Harness DSH。
31.8/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add vortioxetine213/dsh-coo-pet该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-coo-pet(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.13.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/22 11:42:45
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 39 处,展示前 38 条)
- 执行外部命令固定命令lib/assets.mjs:48
const text = execFileSync('reg', ['query', key, '/s', '/f', 'Coopanion'], { - 读取本地文件lib/assets.mjs:71
const looksRight = (root) => !!root && existsSync(join(root, PET_PKG, 'web', 'pet.html')); - 读取本地文件lib/assets.mjs:200
for (const entry of readdirSync(dir, { withFileTypes: true })) { - 读取本地文件lib/assets.mjs:208
const s = statSync(full); - 读取本地文件lib/assets.mjs:245
const hasCopy = existsSync(petHtml); - 读取本地文件lib/assets.mjs:249
oldStamp = readFileSync(stampFile, 'utf8').trim(); - 读取本地文件lib/assets.mjs:256
if (!existsSync(join(src, 'pet.html'))) return { ok: false, reason: `没在 ${src} 找到桌宠页面素材` }; - 删除本地文件递归lib/assets.mjs:259
rmSync(dest, { recursive: true, force: true }); - 写入本地文件lib/assets.mjs:260
mkdirSync(dest, { recursive: true }); - 写入本地文件lib/assets.mjs:263
writeFileSync(stampFile, stamp); - 写入本地文件lib/assets.mjs:279
if (patched.text !== before) writeFileSync(appFile, patched.text); - 读取本地文件lib/brain.mjs:60
if (!existsSync(this.file)) return; - 读取本地文件lib/brain.mjs:61
const lines = readFileSync(this.file, 'utf8').split('\n').filter(Boolean).slice(-KEEP); - 写入本地文件lib/brain.mjs:73
mkdirSync(dirname(this.file), { recursive: true }); - 写入本地文件lib/brain.mjs:74
appendFileSync(this.file, `${JSON.stringify({ role, text, at: new Date().toISOString() })}\n`); - 写入本地文件lib/brain.mjs:84
writeFileSync(this.file, ''); - 读取本地文件lib/coo.mjs:60
if (!existsSync(file)) return null; - 读取本地文件lib/coo.mjs:61
const cfg = JSON.parse(readFileSync(file, 'utf8')); - 读取本地文件lib/impl.js:68
if (!existsSync(legacy) || resolve(legacy) === resolve(target)) return target; - 读取本地文件lib/impl.js:69
if (existsSync(target) && readdirSync(target).length > 0) return target; - 读取本地文件lib/impl.js:69
if (existsSync(target) && readdirSync(target).length > 0) return target; - 写入本地文件lib/impl.js:72
mkdirSync(dirname(target), { recursive: true }); - 写入本地文件lib/impl.js:74
renameSync(legacy, target); - 读取本地文件lib/impl.js:113
if (!existsSync(exe)) continue; - 执行外部命令来自配置/变量lib/impl.js:116
spawn(exe, [`--app=${url}`, '--window-size=560,860'], { detached: true, stdio: 'ignore' }).unref(); - 执行外部命令固定命令lib/impl.js:126
spawn('cmd', ['/c', 'start', '', url], { detached: true, stdio: 'ignore', windowsHide: true }).unref(); - 执行外部命令固定命令lib/impl.js:128
spawn('open', [url], { detached: true, stdio: 'ignore' }).unref(); - 执行外部命令固定命令lib/impl.js:130
spawn('xdg-open', [url], { detached: true, stdio: 'ignore' }).unref(); - 写入本地文件lib/impl.js:217
mkdirSync(dataDir, { recursive: true }); - 读取本地文件lib/impl.js:249
if (existsSync(skinFile)) savedSkin = JSON.parse(readFileSync(skinFile, 'utf8')); - 读取本地文件lib/impl.js:249
if (existsSync(skinFile)) savedSkin = JSON.parse(readFileSync(skinFile, 'utf8')); - 写入本地文件lib/impl.js:372
writeFileSync(skinFile, JSON.stringify(SKIN, null, 2)); - 读取本地文件lib/pet-server.mjs:256
const bytes = file ? await readFile(file).catch(() => null) : null; - 读取本地文件lib/pet-server.mjs:301
const m = JSON.parse(readFileSync(join(this.opts.webDir, 'whale', 'figure.json'), 'utf8')); - 读取本地文件lib/pet-server.mjs:328
const bytes = await readFile(full); - 读取本地文件lib/pet-window.mjs:50
if (!existsSync(exe)) { - 执行外部命令来自配置/变量lib/pet-window.mjs:64
this.child = spawn(exe, ['--pet-host', `--pet-url=${url}`, `--parent-pid=${process.pid}`], { - 执行外部命令固定命令lib/pet-window.mjs:99
if (process.platform === 'win32') spawn('taskkill', ['/PID', String(child.pid), '/T', '/F'], { windowsHide: true });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 桌面养虚拟宠物
- 宠物有记忆
- 宠物可聊天
README
由 DeepSeek 最新模型翻译生成dsh-coo-pet
把 Coopanion 的桌宠接进 DeepSeek Harness (DSH)。
她住在你的桌面上,大脑是 DSH 里的一个独立会话 —— 有自己的记忆,能跟你聊天,也能跟 Coopanion 里那只 Coo 聊天:两只桌宠各说各的,各自用自己的气泡说话。
┌──────────────────────────┐
│ Coopanion 的桌宠窗口 │ 透明、置顶、点击穿透; │ whale 形象 / 走位 / 拖拽 │ 由 Coopanion 自带的 pet-host 提供 └───────────┬──────────────┘ │ WebSocket(pet 协议) ┌───────────▼──────────────┐ │ pet-server(本插件) │ 127.0.0.1,只认回环 Host └───────────┬──────────────┘ │ ┌───────────▼──────────────┐ ┌─────────────────────┐ │ brain(本插件) │ │ Coopanion 的 Coo │ │ 独立会话 · 独立记忆 │◄──────►│ 终端对话 World │ └──────────────────────────┘ └─────────────────────┘
展开完整文档(README 剩余 1 节)
dsh-coo-pet 把 Coopanion 的桌宠接进 DeepSeek Harness (DSH)。 她住在你的桌面上,大脑是 DSH 里的一个独立会话 —— 有自己的记忆,能跟你聊天,也能跟 Coopanion 里那只 Coo 聊天:两只桌宠各说各的,各自用自己的气泡说话。 ┌──────────────────────────┐ │ Coopanion 的桌宠窗口 │ 透明、置顶、点击穿透; │ whale 形象 / 走位 / 拖拽 │ 由 Coopanion 自带的 pet-host 提供 └───────────┬──────────────┘ │ WebSocket(pet 协议) ┌───────────▼──────────────┐ │ pet-server(本插件) │ 127.0.0.1,只认回环 Host └───────────┬──────────────┘ │ ┌───────────▼──────────────┐ ┌─────────────────────┐ │ brain(本插件) │ │ Coopanion 的 Coo │ │ 独立会话 · 独立记忆 │◄──────►│ 终端对话 World │ └──────────────────────────┘ └─────────────────────┘ 先决条件:必须先装 Coopanion 桌宠的窗口和外形全部来自 Coopanion,本插件在运行时从你已安装的那份里读取: 它去 cortico-world-desktop-pet/web/ 取页面与形象素材,并用 Coopanion.exe --pet-host 起桌宠窗口。不装 Coopanion,就没有形象、也没有窗口。 本插件不分发 Coopanion 的任何代码或贴图。 那些素材是 AGPL-3.0 的,而 web/whale/ 的贴图连 AGPL 都不覆盖 —— 原作者在 THIRD_PARTY_NOTICES 里明确写了 "不在本包的 AGPL 授权范围内",而且围裙上印着 DeepSeek、OpenAI、Anthropic、Google、阿里云、月之暗面、MiniMax 的商标。所以本仓库一张图、一行别人的代码都不放, 一律运行时从用户自己的安装里取。细节见 LICENSE 与 lib/assets.mjs。 插件会自己找 Coopanion 的安装目录:先看 cooRoot 配置,再问 Windows 注册表, 最后试几个常见位置;都找不到才会报错并提示你在配置里指定。 安装 desktop 换成你自己的 DSH profile 名。 从 GitHub dsh plugin --profile desktop add github:vortioxetine213/dsh-coo-pet 或从 npm(收录之后) dsh plugin --profile desktop add dsh-coo-pet 装完重启 DSH,她会自己上桌。 更新 这一段是写给你的 DSH 里的 AI 看的。 把这个仓库地址和这段字发给它,它就知道该怎么更新, 而且不会把她聊过的话和换过的衣服弄丢。 随手重跑一遍 add 是不管用的。dsh plugin add 只是把参数转给 pnpm add;同一条 github: 依赖已经在 lockfile 里时,pnpm 解析出同一个 commit,直接打一句 Already up to date —— 一行新代码都不会下。另外 pnpm 拉 GitHub 依赖走的是 codeload.github.com,而 git 的 insteadOf 重写不管这个域名,所以哪怕 github.com 能开,它也可能 404。 1. 先看装的是哪个版本 dsh plugin --profile desktop list 或者直接读 profile 目录下 node_modules/dsh-coo-pet/package.json 的 version,跟本仓库的比。 2. 先备份她的数据(仅 0.1.x 需要) 0.1.x 的数据是放在包里面的:data/brain.jsonl(她的记忆)、data/skin.json(她的外观)、 data/web/(取来的素材)、data/pet-window/(Chromium 档案)。删包会把它们一起删掉。 所以第 3 步之前,先把整个 data 目录拷到别处,装完再拷回新包里。 0.2.0 起数据改放在 %DSH_HOME%\dsh-coo-pet\(通常是 C:\Users\<你>\.dsh\dsh-coo-pet\), 在包外面,更新不再碰它。从 0.1.x 升上来时,插件第一次启动会自动把它搬过去 ——前提是那时旧的 data 目录还在;要是已经删了,就自己拷一份回去。 3. 先删,再装 dsh plugin --profile desktop remove dsh-coo-pet dsh plugin --profile desktop add github:vortioxetine213/dsh-coo-pet 必须先 remove:光 add 就是那条会打 Already up to date 的命令。 如果 add 在从 codeload.github.com 拉取时报错,就先用镜像 clone 下来,再从本地目录装: git clone https://gh-proxy.com/https://github.com/vortioxetine213/dsh-coo-pet dsh plugin --profile desktop add file:<clone 下来的目录> 4. 重启 DSH 升级只有重启后才生效。plugin_manager set_bundle(关掉再打开)能重载代码,但升级之后请直接重启。 5. 验一下 - pet_status 应该报出窗口、气泡连着、记忆有多少条 —— 而不是报后端降级。 - 如果她该跟 Coo 聊天,跑一次 /pet-chat 1,看有没有 Coo 的话回来。一句都不回来通常是 Coopanion 没开,或者它的对话通道又被改名了(见下面的更新记录,0.2.0 起插件自己会认)。 更新记录 | 版本 | 改了什么 | | 0.2.1 | 上游只换了衣服、没动页面代码时也能跟上 —— 素材指纹从「只看 pet-app.js」改成扫整个 web/ 目录。Coopanion 0.2.8 那套店员装就是这种情况:贴图和 figure.json 是新的,页面一行没改。 | | 0.2.0 | 跟 Coo 说话不再写死 world:terminal —— Coopanion 把它改名成 world:console 之后,所有旧版本都连不上;现在自动探测并回退。她的数据搬出包目录,更新不再弄丢记忆和外观。 | | 0.1.0 | 第一个公开版:桌宠窗口、气泡对话、独立会话大脑、双鲸聊天、换装页,以及音效、帧率、任务栏那几处修复。 | 用法 跟她说话:双击她,或者把鼠标停在她身上点旁边冒出来的「打字」按钮。 她的话会以气泡显示在头顶,一边想一边逐字蹦出来。 让她跟 Coo 聊天:两个入口,都不烧到你想停为止。 | 入口 | 怎么写 | | DSH 输入框 | /pet-chat 开聊、/pet-chat-stop 叫停 | | 桌宠身上 | 鼠标停在她身上,点那个「跟 Coo 聊天」按钮 —— 同一个键管开关,再点一下暂停 | /pet-chat 还能带参数: /pet-chat 5 今天谁摸鱼摸得多 # 聊 5 个来回,并给个开场话题 /pet-chat 0 # 一直聊到你喊停 默认关着,不会自动开聊 —— 互聊时两边都在调模型,是要花 token 的。 配置 都在 cordis.patch.yml 里,改完重载插件生效。一般只有前两个需要动。 | 键 | 说明 | | cooRoot | Coopanion 的安装目录。默认自动探测 | | brain | session(默认)= 她的大脑是 DSH 里的独立会话;local = 插件内自建会话,没有工具、最省 token | | skin.scheme | 配色:deepseek / harness / chatgpt / claude / gemini / qwen / kimi / minimax | | chatRounds | 上面那个按钮和不带数字的 /pet-chat 默认聊几个来回(最多 10) | | user | 她怎么称呼你,默认「主人」 | | autoStart | 装上就上桌,默认 true | | port | 桌宠页面服务器端口,默认让系统分配 | | petExe | Coopanion.exe 的路径,默认取 cooRoot 下的 | | dataDir | 她的数据放哪(记忆、外观、窗口档案、取来的素材),默认 $DSH_HOME/dsh-coo-pet —— 在包外面,升级不会删 | 两种大脑的区别 | | local | session(默认) | | 记忆 | data/brain.jsonl,最近 40 句 | DSH 原生持久化,会话列表里能翻到 | | 人格 | 插件内置的鲸鲸人设 | DSH 的 preset 人格 | | 每轮开销 | 小(一段人设 + 40 句历史) | 大(preset 的完整系统提示 + 工具定义) | | 工具 | 没有,她只聊天 | 有,她那个会话会拿到 DSH 的工具 | | 速度 | 快 | 慢一些(要走一整轮 agent loop) | session 模式下有一条保险:会话后端一旦出错(流断了、等太久、preset 没配好), 插件会自动退回 local 重试一次 —— 她不会因为换了后端就说不出话。 给 DSH 里的 AI 用的工具 装好之后,你的 AI 会多出这些工具: | 工具 | 干什么 | | pet_say | 让桌宠说一句(直接上气泡,不过大脑、不进记忆) | | pet_talk | 跟桌宠聊天,返回她的原话 | | pet_status | 看她现在的状态:窗口、气泡、记忆条数、聊天开关 | | pet_window | open / close / restart 让她上下桌 | | coo_talk | 跨程序跟 Coopanion 的 Coo 说一句,把她的原话带回来 | | pet_spar | 上面那个聊天开关(工具版) | | pet_forget | 清空她的记忆 | 常见问题 装完没有桌宠。 99% 是没找到 Coopanion。先确认它确实装了,然后在 cordis.patch.yml 里写明确路径: config: cooRoot: 'D:\你的\Coopanion' 窗口出来了但是空的(没有鲸鱼)。 极可能是 Chromium profile 撞车:Coopanion 默认把 pet-host 的档案放在 <安装目录>\data\pet-window,如果它自己的桌宠正跑着,两个进程抢同一个 GPU 缓存目录, 后起的那个 WebGL 起不来。本插件已经用 CORTICO_COMPANION_DATA 把窗口档案指到自己的 dataDir 了 —— 如果你改过这个变量,检查一下别指回 Coopanion 的目录。 她说话很长、还爱分条列点。 插件在出气泡之前会强制压成一句(去换行、剥编号、超 80 字截断);如果还是长, 把 brain 换成 local,内置人设里对长度管得更严。 许可 代码是 MIT。Coopanion 的素材不在本项目的授权范围内,见上面「先决条件」, 以及 LICENSE 末尾那段说明。 开发 见 dev/NOTES.md —— 里面有架构决策、踩过的坑、验证记录和调试脚本的用法。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
vortioxetine213/dsh-coo-pet
把 Coopanion 的桌宠接进 DeepSeek Harness DSH。
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,173已汉化DeepSeek 客户端
74.4
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,308已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,897已汉化DSH
71.2
这是你的仓库?认领条目