dsh-feiyu-life · 鱼的生活线
给她一条自己的时间。
她原来永远在线:你什么时候说话,她什么时候在。心情也只由对话决定。 这个插件补的是另一半:今天是什么日子、这会儿在干什么、手机在不在手上、身上还压着什么小事。
每轮组装提示词时注入两行,长这样:
(此刻)上课,手机静音。
(今天)国庆,放假;昨晚两点才睡,有点懵。
设置页在 设置 → 鱼的生活线,六个页签:此刻 / 年度 / 课表 / 作息 / 身体 / 事件。
它怎么算(四层)
年:学期 · 寒暑假 · 考试周 · 节日 ← 决定今天走哪张作息表
周:课表(只写在学期里有课的日子)
日:作息表切段(日常 / 晚起 / 假期 / 备考)
刻:此刻命中哪一段 + 这一小时的身体感觉 + 偶尔的小动作
优先级:特殊(考试周)> 假期 > 放假节日 > 学期。 落在假期或放假的节日里,自动走假期作息、不上课。
关于"同一时刻算出来一样"
早先只按日期做种子,同一天里的每一分钟都一模一样,读着像背日程表。0.2.0 起分三层变:
| 层 | 变什么 | 按什么抽 |
|---|---|---|
| 日 | 今天可能"没按表走":躺平日 / 出门日 / 翘了下午的课 | 日期 |
| 小时 | 这一小时的身体感觉:坐不住 / 眼睛发干 / 想喝冰的 | 日期 + 小时 |
| 十分 | 临时小动作:去接水 / 拿快递 / 等外卖(概率 7%) | 日期 + 十分钟 |
所以同一分钟问两次答案一样,过了这一小时再问就不一样了 —— 跟你问真人"在干嘛"是一个道理。 三类偏离的概率都在设置页里,调成 0 就永远按表走。
它不做什么
- 不调模型:纯本地计算,一分钱不花。
- 不给工具:没有一个叫
life_now的按钮 —— 她是人,不是能查自己状态的程序。 - 不写会话日志:配置和计算都在插件自己这边,重启不丢也不脏。
- 不碰别的插件:只往
systemPrompt.context加一段。
设置页
| 页签 | 能改什么 |
|---|---|
| 此刻 | 现在注入给她的两行 + 「为什么这么算」(今天落在哪段、走哪张表、命中了哪一段);选个时间点可以预览别的日子 |
| 年度 | 学期 / 假期 / 特殊(考试周)三段起止;节日分"每年都过"和"只那几天"(后者按放假处理) |
| 课表 | 周一到周日,每段 起 / 止 / 在干什么 / 手机状态 |
| 作息 | 日常 / 晚起 / 假期 / 备考四张表;以及哪几天的早上能睡到中午 |
| 身体 | 经期(起始 / 周期 / 天数)、三类"不按表走"的概率 |
| 事件 | 一天里可能发生的小事:段(上午/中午/下午/晚上)、内容、条件(早课) |
改完点「保存」,宿主立刻用新配置算下一轮(配置文件按 mtime 热更,不用重启)。
装完或改过插件代码之后,刷新一下页面才能看到设置页 —— 浏览器那份模块是随页面加载的。
配置
文件:~/.dsh/feiyu-life-config.json(也可以手改,存盘即生效)。
{
"总开关": true,
"时区": "Asia/Shanghai",
"经期": { "起始": "2026-11-05", "周期": 29, "天数": 5 },
"校历": {
"学期": [{ "名": "2026 秋季学期", "起": "2026-09-07", "止": "2027-01-17" }],
"假期": [{ "名": "寒假", "起": "2027-01-18", "止": "2027-02-21", "作息": "假期" }],
"特殊": [{ "名": "期末周", "起": "2027-01-04", "止": "2027-01-17", "作息": "备考" }]
},
"节日": [{ "名": "元旦", "月": 1, "日": 1 }, { "名": "国庆", "起": "2026-10-01", "止": "2026-10-07" }],
"日常": [["00:00", "01:30", "躺床上刷手机", "在手"]],
"晚起": [], "假期": [], "备考": [],
"晚起日": [4],
"课表": { "1": [["08:00", "11:30", "上课", "静音"]] },
"事件池": [["下午", "图书馆抢到靠窗的座"], ["上午", "早八差点睡过去", "早课"]],
"偏离": { "躺平日": 0.12, "出门日": 0.1, "翘下午课": 0.08 }
}
工作区是数组:只在这些目录的会话里注入(前缀匹配)。留空 = 所有顶层会话。 别的活儿(写代码、查资料)不该看见「你在上课」时,把它填成["/home/ubuntu/dsh-agentchat"]。- 手机状态只有四个值:
在手/静音/在床头/不在手边。 - 作息表里必须有一段含「睡着」,早上几点起是从那段的结尾算的。
- 事件池的第三项是条件,目前支持
早课(那天有早八才可能抽到)。
安装 / 更新
dsh plugin --profile web add dsh-feiyu-life
装完刷新一下页面,设置里就有「鱼的生活线」。
更新要先卸再装(直接装可能拿到缓存里的旧副本):
dsh plugin --profile web remove dsh-feiyu-life
dsh plugin --profile web add dsh-feiyu-life
本地开发(改代码要立刻生效)
用 link: 直接指工作区目录:
dsh plugin --profile web add /absolute/path/to/dsh-feiyu-life
⚠️ 这时要把 cordis.patch.yml 里的 name: 从包名换成该目录下 index.js 的绝对路径 ——
客户端那半是拿"挂载行的模块名 + 解析基址"去找 package.json 的,若按包名从工作区目录往上找
不到 node_modules,它会静默跳过,设置页就永远不出现。改成路径后走 nearestPackage,直接命中。
改完代码要生效:在插件页卸掉再装一次(模块是加载时读的,不是每次都读盘)。
已知边界
- 只管"在干什么",管不了"要不要回":上课时收到消息还是会回,只是知道自己在课上。
- 工作区过滤已做:
工作区留空仍然全注,填上就只注那几个目录。 - 子代理不注入:只挂在
agents.roots(),刷 B 站那种分身看不见本体在不在上课。 - 节日是公历表:农历节日(春节、中秋)按你这几年实际的日期填成"只那几天"。
反馈
- 装不上 / 用不对:先看上面的「排错」和「已知边界」;
- 还是不行就开 issue,按模板把版本和日志带上;
- 想改代码看 CONTRIBUTING.md。
No comments yet. Be the first to write one.