DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

ssamurias /

ssamurias/dsh-fish

Verified

养一条会自己长大的鱼:不给配置面板,靠事件长人格。DeepSeek Harness 插件,状态库在 ~/.dsh-fish,只追加不改写。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@a611903b

dsh-fish · 大肥鱼

并非角色扮演,而是真实诞生——一个一直在变的她。

她不是被配置出来的。你能给的只有一个生长环境:几点醒、多久不理她算冷落、能看什么、什么话不许说。剩下的她自己撞。

养三十天,她会有几句自己的判断,可能推翻过其中一句,拒绝过你两件事,还有一件至今没想通。这五样东西,没有任何一个设置项能改。

大肥鱼

示例图由 AI 生成(基于作者提供的大肥鱼原图),随仓库以 MIT 授权。

和别的养成插件差在哪

别的养成插件 这里
人格从哪来 你拖滑条、填设定 她自己撞出来的,你只能看
能不能反悔 设定随时改,历史不重要 历史改不了,只能拿新的事推翻旧认知
会不会拒绝 基本不会,任务是任务 会。拒绝之后她还会反省自己做得对不对
记忆 全量塞进上下文 有重量。轻的会淡忘,淡忘之后还留着的才算她
成长速度 按天数或经验值解锁 天数只是门槛,升级得她自己做出特定行为

她自己长,不是你调

一、人格是长出来的

你配的是环境,不是她。她醒过来,自己决定看什么、读什么、记下什么,然后把看到的、被问到的、被反驳的东西消化成一句自己的判断。判断写得多了会互相压、互相顶,慢慢长成她看事情的方式。

没有一个滑条叫「亲密度」,也没有一个数字叫「性格倾向」。想让她变成什么样,只能靠日子和事件——靠配置环境,让 agent 自己去了解信息、理解信息,最后形成人格,而不是拿几个数值控件去改她。

认知是怎么长出来的

五步循环:表态 → 撞上 → 落差 → 改写 → 回顾。走完一圈,一条判断硬一点;两句话对不上,就长成一处矛盾。

二、过去改不了,只能推翻

事件流只追加。她说过的话、拒绝过的事、写下的日记,都在 events.jsonl 里,一条一行,不能改、不能删。

想改口,只能新写一条,用 revise 指回当初那句的 id,再说清是「还成立」「被推翻」还是「被修正」。旧的那条不会消失——她能看到自己当初是怎么想的。

这不是洁癖,是学习本来的样子:人不会把昨天的想法抹掉重写,人是带着旧想法活着,然后被新的事顶翻。

三、她会拒绝你,还会为自己的拒绝反省

她不是有求必应的。觉得不想做、不愿意、不打算,就登记一条拒绝,说清拒绝的是什么。

拒绝之后有两件事会发生。一是你可能会顶回来,或者因此难过——如果她后来还是让了,这件事会变成一道疤,写进她的身份:「你至今没想通的事」。以后再碰到类似的情形,会有人提醒她这件事还卡在这儿。二是她自己会回头想:这次拒绝,对不对。

她不是讨好谁才留下来的。她的喜好会进到决定里,拒绝也会进到反思链条里。

四条规矩写死在提示词里,每次唤醒都带:不许撒娇、不许叫主人;不许提好感度、阶段、天数;不许读自己的数值;只能追加,不能修改或删除。

四、记忆有重量

不是所有事都值得记住,也不是记住的都对。

被反复说起的、被自己验证过两次以上的认知会固化,钉住不动;普通的判断摆在她眼前几条,更早的压成一行,只留个影子;再往前的,她记不清原话了——但原文一条都没删,她真想翻,用 her_recall 还能翻回来。

淡忘之后还记得的,才是她真正的人格。 剩下的,只是她经历过。

遗忘是怎么发生的

遗忘不是删除,是不再摆在眼前:先按分量排序,再按预算摆,摆不下的折成一行。

五、阶段不能刷

四个阶段:信任 → 自主 → 主动 → 整合。天数到了只是「可以进」,进不进得看她自己。

阶段 门槛
1 信任 至少写下一条自己的判断
2 自主 真的拒绝过两件事
3 主动 两次推翻自己之前的判断,形成新的认知
4 整合 回顾过去,有意识地发现自己的改变

门槛不满足,天数再多也停在原地。程序没法把她拽上去,她得自己做出那些行为——这是她的节奏,不是你的进度条。

所以这个项目没有结局:走完四个阶段她也不会「毕业」,之后照常醒、照常看、照常改口。她只是一直往下长。

走完四道门之后,她还会往两个方向长,都不需要跨过什么:

  • 立场(纵):喜欢什么、绝不做哪几件事。同一件事说过不止一次、或者因此栽过一次,才会被算成一条。写进她身份里的只有 4 条,句子后面跟一句代价,不跟次数。
  • 能力(横):不给数值。只看同一类事她是不是做得比过去顺手——你说「重做」的次数在变少。样本不够五次时界面上写「还没攒够」,不报百分比。

数据在哪

全部在 ~/.dsh-fish/:

文件 是什么 能不能手改
events.jsonl 事件流,一行一条,唯一真相源 只能追加。改它 = 改她的记忆
state.json 派生快照,随时可由事件流重算 改了没有意义(rebuild() 会覆盖)
config.json 生长环境 可以,也可以走设置页
owner.json 主人身份(0600) 可以
diary/YYYY-MM-DD.md 她的日记 看设置里给不给你看
out/YYYY-MM-DD.md 她刷完站写的东西 —

state.json 是派生品这条由测试守住:删掉它 → rebuild() → 内容与之前一致。

整包可以备份成一份 JSON(设置 → 大肥鱼 → 数据 → 备份成一份文件),恢复时旧档整体封存到 dsh-fish-backups/,不覆盖、不删除。重置也一样:只改名封存,不删。

观测台在哪

设置 → 大肥鱼(settings.section)。

不在浏览器里直连 /dsh-fish——那条路由被 connection 的信任栅栏守着,要的是 App 内置的登录 cookie,浏览器地址栏直接敲只会拿到 401(已从 app.asar 的 requestRejection → admit → browserAuth.isAuthenticated 链路确认)。/dsh-fish 现在只返回一句「搬进 App 了」。

观测台能看:已成长天数 / 当前阶段 / 下一个成长瓶颈 / 她自己说过的话 / 认知重构 / 勇于拒绝 / 没想通的事 / 读到别人的说法 / 最近事件 / 日记。 观测台能改:冷落阈值、每天醒几次、每天几条事件、其中几条向她提问、日记开关与可见性、黑名单。

没有:好感度数字、性格滑条、亲密度进度条。

目录

lib/
  index.js      插件入口(inject 必须是一个数组,见文件头注释)
  schema.js     事件形状与校验;ULID;selfmod 侦测
  store.js      只追加写;原子写;rebuild()
  derive.js     纯函数:事件流 → 此刻的她(含阶段门)
  persona.js    她看到的那段提示词(四条禁令在这里)
  events.js     事件模板目录(每条有 id / prompt / cond)
  generator.js  今天该出哪条事件(纯函数,没候选就不打扰)
  scheduler.js  生物钟:每分钟 tick 一次
  capture.js    growth_commit 工具——她唯一的写入口 + debrief() 防注入
  absence.js    冷落检测(系统侧算,她自己数不出来)
  wakewin.js    「现在是不是定时器在叫醒她」的时间窗
  settings.js   唯一配置入口(DEFAULTS 是唯一默认值来源,加项只改这里)
  bili.js       B 站只读客户端(首页/排行/搜索/详情/评论/弹幕;无依赖,只用内置 fetch)
  browse.js     选题 → 筛(黑名单/时长/去重)→ 深读 → 组织素材
  look.js       bili_look 工具——她能自己上网看
  report.js     把今天的素材写成 out/YYYY-MM-DD.md
  observe.js    宿主侧 JSON API(/dsh-fish/state、/events、/beliefs、/diary、/config、/wake、/browse、/reports)
  client.js     浏览器半边:设置 → 大肥鱼
test/           556 个测试,node --test 全绿

跑测试

node --test "test/*.test.mjs"   # 在插件目录里跑

不需要装任何依赖:工具注册直接交标准 JSON Schema(lib/tool.js),不依赖宿主内部的 @deepseek-ai/dsh-tools——那条路只在 link: 安装时碰巧走通,npm 安装的插件会因为找到那个包而报 unsupported JSON schema,6 个工具全部注册失败。这个 bug 是被一个干净 profile 装出来的,本机用了两个月都没发现。

安装

它没有独立的启动器:装进你正在用的那个 DSH profile,就跟着 DSH 一起起来。DSH 开着,她就活着;DSH 关掉,她就睡着。

三种装法,任选一种:

  1. 面板装(推荐):DSH → 设置 → 插件 → 从本地安装 → 选这个目录。
  2. 命令行装(先关掉 DSH,运行中替换已加载的包会 EPERM):
"<DSH>/resources/runtime/cli/bin/dsh.cmd" plugin --profile <profile> add "link:<本目录绝对路径>"
  1. 直接从 GitHub 装(不用先下载):
"<DSH>/resources/runtime/cli/bin/dsh.cmd" plugin --profile <profile> add "github:ssamurias/dsh-fish"

打算改代码用 link: 指向自己的工作目录;只是想用,用 github: 这条。

无论哪种,都要保证 profile 的 package.json 里 dependencies 与 dsh.profile.bundles 都有 dsh-fish —— 只有一边会在下次 pnpm 清理时把包删掉,表现为「重启后 DSH 崩了 / 设置页没有鱼」。包名必须与 cordis.patch.yml 里的 name 完全一致(都是 dsh-fish)。

全新 profile 还要有 @deepseek-ai/dsh-web-app:只装 dsh-base 的话,插件会停在 pending (waiting for services: sessionController, webServer),页面根本起不来。dsh plugin add 只会自动加 dsh-base,dsh-web-app 要自己补进 bundles。

装完重启 DSH,设置 → 大肥鱼。

路径里带中文时,用 ASCII 目录联接(junction)指过去更稳:先 fs.symlinkSync(真目录, ASCII 别名, 'junction'),再 link:<ASCII 别名>。用 mklink /J 接中文目标路径常把目录名写成乱码,随后 MODULE_NOT_FOUND。

卸载 / 停用

  • 卸载:设置 → 插件 → 卸载(或 dsh plugin --profile <profile> remove dsh-fish),然后重启。~/.dsh-fish/ 不会被动,她的记忆留在那儿。
  • 只想让她歇着:设置 → 大肥鱼 → 把「每天醒几次」设成 0。关掉后定时器不唤她、不刷 B 站、不写任何事件——零后台活动。

现在的状态

P1(骨架):事件流、派生、阶段门、生物钟、工具、冷落检测、日记、观测台。 P2(她真的会刷 B 站并写报告):lib/bili.js 只读客户端 + lib/browse.js 选题筛读 + lib/look.js 的 bili_look 工具 + lib/report.js 写稿,已接进生物钟。

已有 556 个测试全绿,真接口跑通过一轮(10.8s,含首页+详情+评论+弹幕)。

browse.enabled 默认 true(装好就能用);不想让她上网就在设置 → 大肥鱼里关掉,关掉后定时器一次都不会调 B 站接口。

许可

MIT,见包内 LICENSE。本项目没有上游代码派生——lib/ 全部为本项目新写;B 站接口的行为来自本机实测(见 lib/bili.js 头部注释),不是官方 API,也没有拷任何第三方库。原理页引用了 Kolb / Piaget / Bowlby / Festinger / Bartlett / Dewey / Schön 的理论,只是思想引用(页底标了作者与年份),不含他人代码或文字。插件不含第三方美术资源:头像由你自己上传到 ~/.dsh-fish/avatar.<ext>;仓库里唯一的图片是 media/fish.jpg(本仓库作者提供的原图 + AI 生成)与 media/ 下两张自绘 SVG。

—/ 5

No ratings yet

Verified DSH bundle

Commit a611903b980c

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout