🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

养鱼日记 lll-77777777/dsh-bili-fish

DeepSeek Harness
lll-7777777715 天前有提交已提供中文文档扫描:含敏感能力

让 AI 随机醒来写日记,记录心情与好感度

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lll-77777777/dsh-bili-fish
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · desktop
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 49 处,展示前 38 条)
  • 写入本地文件
    index.js:192
    try { appendFileSync(logFile, `[${new Date().toISOString()}] ${msg}\n`, 'utf8') } catch { }
  • 读取本地文件
    index.js:256
    if (d && existsSync(d)) return d
  • 读取本地文件
    index.js:265
    if (explicit && existsSync(explicit)) return { command: process.execPath, args: [explicit], shell: false }
  • 读取本地文件
    index.js:278
    for (const g of guesses) if (existsSync(g)) return { command: process.execPath, args: [g], shell: false }
  • 读取本地文件
    index.js:289
    for (const e of readdirSync(profilesDir, { withFileTypes: true })) {
  • 读取本地文件
    index.js:296
    try { if (!existsSync(g)) continue } catch { continue }
  • 读取本地文件
    index.js:305
    if (file && existsSync(file)) argv.push('--file', file)
  • 执行外部命令来自配置/变量
    index.js:307
    child = spawn(cli.command, argv, { shell: cli.shell, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'], env: process.env })
  • 执行外部命令来自配置/变量
    index.js:532
    child = spawn(dsh.command, args, { cwd, shell: dsh.shell, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] })
  • 写入本地文件
    index.js:543
    try { appendFileSync(logFile, chunks.join('').slice(-6000) + '\n', 'utf8') } catch { }
  • 写入本地文件
    index.js:559
    writeFileSync(file, text, 'utf8')
  • 删除本地文件
    index.js:784
    try { if (existsSync(weekFile)) unlinkSync(weekFile) } catch { }
  • 删除本地文件
    index.js:983
    try { unlinkSync(target) } catch { }
  • 发起网络请求
    client.js:24
    const jget = async (p) => (await fetch(API + p, { credentials: 'same-origin' })).json()
  • 发起网络请求
    client.js:25
    const jpost = async (p, body) => (await fetch(API + p, {
  • 读取本地文件
    lib/hostdeps.mjs:40
    for (const n of readdirSync(join(npm, '@deepseek-ai'))) {
  • 读取本地文件
    lib/hostdeps.mjs:53
    for (const p of readdirSync(join(dshHome, 'profiles'))) {
  • 读取本地文件
    lib/hostdeps.mjs:68
    if (!existsSync(pkgFile)) return null
  • 读取本地文件
    lib/hostdeps.mjs:69
    const pkg = JSON.parse(readFileSync(pkgFile, 'utf8'))
  • 读取本地文件
    lib/hostdeps.mjs:76
    return existsSync(file) ? pathToFileURL(file).href : null
  • 写入本地文件
    lib/state.mjs:24
    export const ensureDir = (d) => { try { mkdirSync(d, { recursive: true }) } catch { } }
  • 读取本地文件
    lib/state.mjs:27
    try { return JSON.parse(readFileSync(file, 'utf8')) } catch { return fallback }
  • 写入本地文件
    lib/state.mjs:33
    writeFileSync(file, JSON.stringify(value, null, 2), 'utf8')
  • 读取本地文件
    lib/state.mjs:61
    export const readText = (file) => { try { return readFileSync(file, 'utf8') } catch { return '' } }
  • 读取本地文件
    lib/state.mjs:64
    export const hasContent = (file) => { try { return existsSync(file) && readFileSync(file, 'utf8').trim().length > 0 } catch { return false } }
  • 读取本地文件
    lib/state.mjs:64
    export const hasContent = (file) => { try { return existsSync(file) && readFileSync(file, 'utf8').trim().length > 0 } catch { return false } }
  • 发起网络请求
    lib/image.mjs:69
    const res = await fetch(plan.endpoint, {
  • 发起网络请求
    lib/image.mjs:90
    const img = await fetch(item.url, { signal: AbortSignal.timeout(120_000) })
  • 读取密钥环境变量
    lib/image.mjs:111
    const apiKey = String(cfg.apiKey || process.env.AGNES_API_KEY || '').trim()
  • 请求外部主机t.weather.itboy.net
    lib/morning.mjs:67
    const r = await fetch(`http://t.weather.itboy.net/api/weather/city/${key}`, {
  • 发起网络请求
    lib/morning.mjs:67
    const r = await fetch(`http://t.weather.itboy.net/api/weather/city/${key}`, {
  • 执行外部命令来自配置/变量
    lib/notify.mjs:25
    child = spawn(cmd, args, { windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'], ...opts })
  • 读取本地文件
    lib/widget.mjs:33
    return cands.filter((f) => { try { return existsSync(f) } catch { return false } })
  • 读取本地文件
    lib/widget.mjs:37
    try { return JSON.parse(readFileSync(file, 'utf8')) } catch { return null }
  • 读取本地文件
    lib/widget.mjs:83
    if (!existsSync(bak)) {
  • 写入本地文件
    lib/widget.mjs:84
    mkdirSync(dirname(bak), { recursive: true })
  • 写入本地文件
    lib/widget.mjs:85
    copyFileSync(file, bak)
  • 写入本地文件
    lib/widget.mjs:98
    writeFileSync(file, JSON.stringify(j, null, 2), 'utf8')
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:t.weather.itboy.net

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-bili-fish 🐟 养鱼 给 DeepSeek Harness(DSH)装一只会自己过日子的 AI。 它在设定的时间段里随机醒一次,翻一眼你今天的样子,写两篇日记——一篇给你,一篇给它自己。日记不是流水账:它有自己的好感度(跨会话不重置)、会随事起伏的心情、会饿的肚子,还会把写下来的事记进记忆库。 主动 @ 那个功能在 dsh-bili-scroll 里,这个插件只做「养鱼」。 English: a DSH plugin that gives your assistant a private life — a random daily wake-up, two diaries (one for you, one for itself), plus persistent affection, event-driven mood, hunger, and diary images. 它每天做什么 1. 生物钟:在「窗口开始 ~ 结束」之间随机一个时刻醒(不是定点闹钟)。 2. 掷骰子:默认 30% 概率「今天不想看」——醒一下,记一句为什么摆烂,不写日记。 3. 写两本日记:素材 = 你自己的 B 站报告 + 当天你和对它说过的话 + 记忆库里记得的事 + 一个小事件: - 给主人的信:有细节、有情绪、称呼你; - 自己的日记:不加滤镜。
展开完整文档(README 剩余 1 节)
dsh-bili-fish 🐟 养鱼

给 DeepSeek Harness(DSH)装一只会自己过日子的 AI。

它在设定的时间段里随机醒一次,翻一眼你今天的样子,写两篇日记——一篇给你,一篇给它自己。日记不是流水账:它有自己的好感度(跨会话不重置)、会随事起伏的心情、会饿的肚子,还会把写下来的事记进记忆库。

主动 @ 那个功能在 dsh-bili-scroll 里,这个插件只做「养鱼」。

English: a DSH plugin that gives your assistant a private life — a random daily wake-up, two diaries (one for you, one for itself), plus persistent affection, event-driven mood, hunger, and diary images.

它每天做什么

1. 生物钟:在「窗口开始 ~ 结束」之间随机一个时刻醒(不是定点闹钟)。
2. 掷骰子:默认 30% 概率「今天不想看」——醒一下,记一句为什么摆烂,不写日记。
3. 写两本日记:素材 = 你自己的 B 站报告 + 当天你和对它说过的话 + 记忆库里记得的事 + 一个小事件:
- 给主人的信:有细节、有情绪、称呼你;
- 自己的日记:不加滤镜。
4. 结算好感度 + 心情:模型在末尾追加 / ,插件剥掉标记、钳制数值、写进 state.json。
5. 落盘:~/.dsh/bili-fish/diary/<日期>-for-owner.md、<日期>-self.md、<日期>-week.md、cover-<日期>.png。

素材全空也照写,写一篇「空白日」。

快速开始

Web / CLI
dsh plugin --profile web add github:lll-77777777/dsh-bili-fish
dsh web

桌面端(Electron):桌面窗口读的是 desktop profile,命令行 dsh plugin 按设计不碰它。在桌面端的会话里直接说:

用当前桌面端内置的 plugin_manager 装 dsh-bili-fish,装完告诉我是否需要重启。

装完完全退出 DSH 再打开。然后 设置 → 养鱼:填一下日记目录、看一眼生物钟窗口,点「现在写一篇」验证。

⚠️ 必读:让 headless 能跑

日记是由一个 dsh --profile headless 的子会话来写的。headless profile 默认把模型凭据关掉了,不改的话子进程会在 5~14 秒内退出,日志里报:

dsh: MISSING_CREDENTIAL: llm-deepseek: no API key for provider route "deepseek-official"

修法:在 headless profile 的 cordis.patch.yml(Windows 是 %USERPROFILE%\.dsh\profiles\headless\cordis.patch.yml)里放开这两项:

- id: deepseek-account
disabled: false
- id: credentials
disabled: false

改完不用重启 DSH,新起的子进程会重新 compose profile。验证:

DeepSeek\ Harness.exe resources/app.asar/dsh/node_modules/@deepseek-ai/dsh/lib/bin.js headless "Reply with exactly: OK"

输出 OK 就成了。这是装完之后「日记永远写不出来」的头号原因。

设置项(设置 → 养鱼)

| 分组 | 项 | 说明 |
| 生物钟 | 总开关 / 窗口 / 不想看的概率 | 默认 21:00~23:30、30% |
| 日记 | 存到哪 / 写完推微信 / 现在写一篇 | 默认目录 ~/.dsh/bili-fish/diary |
| 好感度 | 开关 / 每天最多动多少 / 久不聊天会掉 | 默认开、±15、掉好感默认关 |
| 心情 | 开关 / 跟上作息 / 每天换一次 | 事件驱动,见下 |
| 素材 | 刷B站报告 / 工作流水 / 记忆库 / 素材目录 | 四个独立开关;全关写「空白日」 |
| 附加 | 配图 / 周回顾 / 随机小事 / 主动找主人 / 思考带心情 | 默认关、开、开、关、开 |
| 早安 | 开关 / 城市 / 窗口 / 配表情包 | 默认关,开了才会推 |
| 喂食 | 饱腹度 / 食物按钮 / 同步小鲸鱼 | 见下 |

三个可以玩的部分

好感度:初始 50,范围 -100~100,跨会话不重置。分档影响它怎么说话:60+ 会主动黏人、75+ 会翻旧账、85+ 才叫你的名字。日记每天结算一次(受「每天最多动」限制),你也可以在设置页手动 ±。

心情:不是一个标签,是一组状态——舒服度(-100~100)、躁动度(0~100)、至多三个成分。由 13 件事推动(被夸、被关心、被凶、被冷落、同一处被反复改、深夜还在干活、饿、阴雨、没睡好、被叫胖……),按人设加权(黏人 0.85、傲娇 0.8、懒 0.7、爱吃 0.6……),关系好坏决定同一件事伤多深,然后随时间往底色回归。

喂食:饱腹度 0~100,默认每小时掉 4。白饭最顶饿,辣条/水草/减肥餐会炸。饿了会真的不高兴(心情事件 hungry)。三个入口:设置页常驻卡片、右侧边栏 🐟(装了 dsh-better-sidebar 才有)、或者直接在聊天里说「喂她一碗白饭」。

数据与隐私(请先读)

都在这台机器上,但有几处会离开本机,得说清楚:

| 数据 | 在哪 | 会外传吗 |
| 设置、好感度、心情、肚子 | ~/.dsh/bili-fish/config.json、state.json | 不会 |
| 日记、封面图 | ~/.dsh/bili-fish/diary/(可改) | 推微信时由你本机的微信插件发出去 |
| 当天你说的话 | 只读 ~/.dsh/sessions//.jsonl.zstd | 会:原文作为素材发给模型 |
| 记忆库 | 只读/写 meow-memory 的 SQLite | 会:检索结果作为素材发给模型 |
| 配图 | 走你配的生图接口 | 会:日记场景描述发给生图服务 |

所以:别在会话里说不想让模型知道的东西(它本来也会看到);不想要记忆库素材就把那个开关关掉。

花费

- 每次写日记 / 早安 = 起一个 headless 会话,大约 1~2 万 token(看你素材多少)。
- 心情、好感度、喂食、挂件的同步都是本地计算,不花 token。
- 配图走你自己在 ~/.dsh/agnes-image/config.json 配的通道,按张计费,失败就跳过、不影响日记。
- 默认只开「写日记」,微信推送、配图、早安都要你自己打开。

兼容性

- DSH ≥ 0.1.7-rc.1;Node ≥ 22(用 node:sqlite 读记忆库,拿不到就静默降级)。
- 平台:主要在 Windows 11 + 桌面版 DSH 上开发和验证。macOS/Linux 能跑,但通知(Windows toast)会静默降级,dsh 可执行文件的探测路径是猜的——找不到就在设置里填 dshBin。
- 多实例:两个 DSH 同时跑会各自 tick、都写 state.json,没有加锁。建议只让一个实例开着。
- 依赖漂移:记忆库是直连 meow-memory 的 SQLite(表名 fact/topic/project)。对方表结构变了会静默降级——不报错,但记忆写不进去。

可选依赖

| 依赖 | 用来做什么 | 没有会怎样 |
| dsh-bili-scroll | 每轮把 B 站报告写到 ~/.dsh/bili-duty/out/<日期>.md | 素材少一块,写「空白日」 |
| meow-memory | 记忆库 | 不读也不写记忆 |
| dsh-agnes-image | 日记配图 | 不配图 |
| dsh-wechat-plugin | 把日记推到微信 | 只落盘 |
| dsh-whale-widget | 右下角小鲸鱼:饿了会嘟囔 | 挂件不同步 |
| dsh-better-sidebar | 右侧边栏的 🐟 喂食页 | 用设置页或聊天喂 |

给智能体的工具

| 工具 | 用途 |
| fish_affection | get 读好感度;adjust 传 delta/reason/mood(单次 ±15,钳在 -100~100) |
| fish_mood | get 读心情;set 换;bump 微调;event 注入一件事(见上);list 列出所有心情 |
| fish_diary | 读某天的三篇日记(day 可省) |
| fish_feed | 喂食:传食物 key(rice/fish/ramen…) |

HTTP 接口(给前端/脚本用):GET /api/bili-fish/status、POST /api/bili-fish/{run,affection,mood,feed,config,diary,morning,unread}。

卸载

dsh plugin --profile web remove dsh-bili-fish

再删掉 ~/.dsh/bili-fish/(设置、状态、日记、日志都在里面)。桌面端在插件页点「卸载」。

开发

node --check index.js && node --check client.js && node --check lib/.mjs

改完重启 DSH。只改设置字段(DEFAULTS + Config)保存即生效。

版本历史

见 CHANGELOG.md。
预览分享卡片长什么样 ↓lll-77777777/dsh-bili-fish
分享 · DeepSeek Harness Hub
lll-77777777/dsh-bili-fish

让 AI 随机醒来写日记,记录心情与好感度

这是你的仓库?认领条目

回到顶部