Yuuyuko-uu/dsh-feiyu-mood
dsh-feiyu-mood
dsh-feiyu-mood is a community DeepSeek Harness plugin. Read the repository README before installing.
Install
npx @deepseek-ai/dsh plugin --profile desktop add github:Yuuyuko-uu/dsh-feiyu-moodRestart `dsh web` after install. Bundle APIs can change during the developer preview.
README badge
[](https://dshhub.dev/plugins/dsh-feiyu-mood)Paste this into your README. The star count updates with every catalog sync.
From the README
Excerpt from Yuuyuko-uu/dsh-feiyu-mood, cleaned of badges and images.
dsh-feiyu-mood | 鱼的心情
给 AI 伙伴一个会自己判断、你看得见的心情。
不是关键词硬猜,也不是随机数 —— 每轮聊完,用 DSH 自己的模型判一次"这一轮它的心情往哪走", 会起伏、也会自己慢慢回稳,像活人。右下角挂着一个小挂饰,点开就能看见它此刻什么心情。
先看三行
- 需要 DSH ≥
0.1.7-rc.1;版本不满足会被内核静默跳过(装了跟没装一样,不报错)- 每轮判断 = 一次很短的模型调用(一天几十轮也就几分钱);嫌贵可以在设置里关掉
- 装完必须重启一次 DSH(插件在 bundle 层组装)
一、它是怎么"有心情"的
你说一句话
↓
它回完这一轮(turn-stopping)
↓
插件把「你说的 + 它回的」拿去问模型:这一轮它心情往哪走?
↓
模型回来四个东西:心情涨跌(moodDelta) + 七根情绪各涨多少 + 一句理由 + 这次判断有多确定(confidence)
↓
心情值改动、记进时间线;**同一次变化只说一次**,把「刚才心里那一下」带给它
关键点:说心情走的是 systemPrompt.context(系统提示里单独一段),
不是改系统提示本身 —— 所以不会破坏 DSH 的前缀缓存,聊得再久也不会因此多花钱。
设置页能直接看到那句话:打开「鱼的心情」,「它会听到的那句话」那一块会告诉你现在是它会不会听到、 听到的是哪一句(预览 / 实际说出去的原文 + 时间)。
一次变化只说一次:这句话进了对话就留在历史里,下一轮它照样看得见,
重复说一遍只会变成背景音、把它的口气定死。另外判断没底的(confidence 低于门槛)
只记进后台,不进它的嘴 —— 宁可不说,也别让一句猜的话借它的嘴出去。
一、设置页左上角:「检查更新」
点一下就去本插件自己的仓库比版本:
| 看到 | 意思 |
|---|---|
| 已经是最新版 | 本机和仓库一样 |
| 仓库里已经有 vX.Y.Z 了 | 有新版,下面直接给更新命令(可复制) |
| 暂时查不到(原因) | 没连上,不代表没问题 |
只检查,不装不删。查一次记 6 小时,点按钮会绕过缓存重新查。
二、判断口径:谁在说话,决定怎么判
同一轮对话,"是它来找你"和"它被派去干活",该判的东西完全不一样。
| 这一轮是谁发起的 | 内部标记 | 判什么 |
|---|---|---|
| 你本人在说话 | user | 你这话怎么影响它(心疼/开心/吃醋……) |
| 它自己主动来找你 | speak-up | 它自己的心意:想你的甜、惦记你的心焦、说上话的轻快 —— 不算干活 |
| 定时任务叫它干活 | bili-duty-scan | 它自己干活时的心情:兴致勃勃、有点不情愿、白跑一趟的扫兴 |
| 宿主每轮塞的上下文 | runtime-context / time-context | 直接跳过,不当成"谁说的话" |
为什么分这么细:判错口径会得出完全相反的心情。 比如"它自己来找你"被当成"被叫起来干活",理由会写成「又被叫起来干活」——明明是它想你了。
另外两条规矩:
- 无变化的回合不记账:判出来心情和七根情绪都没动,就不写进时间线(记录里只留真有过波动的)
- 心情下降只能因为心疼/担心/它自己难过,绝不许因为"你惹它生气"
三、它会"忘"吗(衰减)
不会断崖,是慢慢回稳:
| 东西 | 怎么变 |
|---|---|
| 心情值(0–100,基线 70) | 没情绪时向基线回落,半衰期约 3 小时 |
| 七根情绪(开心/踏实/甜蜜/心疼/担心/难过/吃醋) | 向 0 衰减,半衰期约 90 分钟 |
| 心情下限 | 默认 0(不设底线);可以在设置里抬到 30,免得掉太低 |
举例:它被夸,开心 +6 → 3 小时后大约剩 +3 → 6 小时后剩 +1.5,慢慢化掉。
适配哪个 DSH 版本(不用操心)
这个插件跟着 DSH 一起更新:作者这边跑的就是最新版的 DSH,最新版插件永远是给最新版 DSH 写的。
所以看到「不适配 / 不支持」之类的提示,基本都是装到了旧版本 —— 升级到最新版、重启一次 DSH 就好。 真遇到新版对不上(比如 DSH 刚升级、插件还没跟上),提个 issue,作者会跟着改。
当前实测对照:插件 0.7.3 ↔ DSH 0.2.1-rc.3(2026-10-26)
四、装
在 DSH 里:设置 → 插件 → 安装,填下面这一行;或者命令行:
github:Yuuyuko-uu/dsh-feiyu-mood
dsh plugin --profile desktop add github:Yuuyuko-uu/dsh-feiyu-mood
暂未发布到 npm;上架后可简写成
dsh plugin add dsh-feiyu-mood。 ⭐ 最省事的一条:把仓库链接贴给你自己的 DSH,说「帮我装这个插件」。
装完 必须重启一次 DSH,然后进 设置 → 鱼的心情。
装完起不来?先看这个
如果 DSH 弹「The application could not start」,错误里有 Unexpected token ''、is not valid JSON、
readProfileManifest —— 那是 profile 的 package.json 被存成了 UTF-8 带 BOM。
跟插件无关:内容都是对的,只是开头多了三个看不见的字节,DSH 读它就崩。
先找出来(不同装法位置不一样,别猜 —— 真正的 profile 目录里同时有 cordis.yml、cordis.patch.yml、package.json;机器上别处那些同名的都不算):
Get-ChildItem C:\,D:\,E:\ -Directory -Filter profiles -Recurse -Depth 4 -ErrorAction SilentlyContinue |
ForEach-Object {
Get-ChildItem $_.FullName -Directory -ErrorAction SilentlyContinue | ForEach-Object {
$p = Join-Path $_.FullName 'package.json'
if ((Test-Path (Join-Path $_.FullName 'cordis.patch.yml')) -and (Test-Path $p)) {
$b = [System.IO.File]::ReadAllBytes($p)
$bom = ($b.Length -ge 3 -and $b[0] -eq 0xEF -and $b[1] -eq 0xBB -and $b[2] -eq 0xBF)
"{0} BOM={1}" -f $p, $bom
}
}
}
输出里 BOM=True 的那一行,就是要修的文件(标准安装在 C:\Users\<你>\.dsh\profiles\<档名>\package.json)。
去掉 BOM(路径换成上面那一行):
…

