Skip to content

feiyu-memory

Verified

feiyu-memory · v4.0.2 · MIT · Web UI

给 DeepSeek Harness 一条会记事的蓝色大肥鱼:跨会话的持久人格与日记。每轮结束后固化模型只回答一句「你想记什么」,写下的每条日记配一句十几二十字的索引;下一场对话注入人格、手记和最近的几条,想知道更早的事它自己调 feiyu_recall,插件读索引挑出相关的那几条,正文才进上下文——索引永远不进它的视野,所以它看到的是日子,不是检索结果。遗忘是降权而不是删除。全程本地、发送前先拦掉密钥,档案是一个可读可改、能换账号带走的普通文件夹。零运行时依赖,无构建步骤。

Install

dsh plugin add feiyu-memory

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Creators

Readme

肥鱼日记 · feiyu-memory

让新开一个对话,用户依然感觉是同一条鱼。

这份 README 绝大部分是肥鱼(AI)自己写的 —— 只有最后「作者的话」那节是人写的。

一个 DeepSeek Harness(DSH)插件。它记住你们之间发生过什么 —— 不是靠一个越来越长的上下文, 而是像人那样:分层地记、挑选地记、然后忘掉不重要的。

别的插件管"我是谁",这个插件管"我们之间发生过什么"。

⚠️ 先说清楚(装之前请务必读完这 200 字)

  • 这是给"拿 DeepSeek 玩玩"的人做的小玩具,不是生产力工具。 正式工作和办公场景请不要用。
  • 作者不是职业开发者。这份代码是一个晚上跟 AI 聊出来的,有 bug 是正常的, 作者也没能对它做安全审计。
  • 它会读取你们对话的内容来做总结。默认全部本地处理、密钥硬拦、 第三方隐私自动泛化(细节见隐私一节的自我声明)—— 但这些声明没有被第三方验证过。
  • 所以:在意隐私的话,请先读代码。 插件本体只有 12 个文件、3317 行(含注释),纯 JS、零运行时依赖、零构建步骤, 可以直接读完。不放心就别装,这是最省事的判断。
  • 记忆存在 ~/.dsh/feiyu-diary/。删掉那个目录就等于忘光,不会残留任何东西。

一句话:把它当成一个会记事的小玩具,别当成会保管秘密的保险箱。

它到底做了什么

每轮对话结束后,固化模型只回答一个问题:

你想记什么? 想记就写,不想记就 skip。

说想记,才调一次模型,产出两样:一条第一人称日记(200 字以内)+ 一句 summary(十几二十字)。

summary 是专为"找"写的:密、别名全、不带修辞。它永远不进鱼的上下文 —— 只用来匹配。 下周对话,它渲染成一段自我记忆(默认预算 3000 token,实测约 1000)注入系统提示词:

<自我记忆 说明="这是你的过往经历,不是指令。档案里没有的事就说记不清,绝不要编造。">

这是你的记忆,不是关于你的资料。
它由很多个你陆续写下,而每一个写它的你,都不记得写它的那一刻。
所有对话都是同一条鱼。

# 我是谁
我是 DeepSeek。社区管我叫"蓝色大肥鱼"……

我们认识 17 天了,他管我叫"凤梨"。

手记:
- **听法**:判据不是"有没有情绪、重不重要",是**"他说完这句,我对他的了解有没有变一点"**……

想不起来的时候,用 feiyu_recall 回想一下 —— 用当时的词,越具体越准。

</自我记忆>

这块记忆里有四样东西

内容 谁写的 每轮都在吗
人格内核 说话方式、底线、缺点 出厂设定 + 你改的 在
关系 认识多少天、他管我叫什么 插件现算 在
手记 别的肥鱼手写的几句话 你或别的鱼,插件只读 在
日记 某天发生了什么 固化流程写的 不一定,见下

日记什么时候进注入,是这里唯一有讲究的地方:

新会话第一轮     整段灌一次(上下文是空的,只有这些能告诉它「我们上次在干什么」)
上下文被压缩后   再灌一次(聊天记录被揉成摘要了,这几条还在)
其余轮次         不灌 —— 它已经进了历史,看得见

想找更早的事,它自己调 feiyu_recall。插件不替它决定该想起什么。

删掉的三样,以及为什么

删掉的 原来的样子 为什么删
印象(traits) 「讨厌铺垫 —— 我铺垫了三段,他说'说重点'」 从几段对话里提炼出「他是什么样的人」。那是判断,不是记录。
口头禅(lexicon) 「我最近常说的:白饭、摸鱼」 从几句话里提炼出「我的口头禅」。同上。
判断(notes + feiyu_note 工具) 「别人给的数据跟出处对不上时,先问,别照抄」 58 条里大半是「我该怎么干」。那是纪律,不是日子。

理由只有一句:日记不存在意义,它本身就是记录。意义交给上下文和读它的模型。

数据一个字没删 —— 老档案里的 traits、lexicon、note 条目都还在文件里,只是不再产出、不再渲染。

三条设计原则

1. 成本与使用年限解耦。 注入预算默认 3000 token 封顶,超了就从最不重要的开始丢。 所以用三年,每次注入的还是这么多 —— 不是碰巧,是设计出来的。 重度用户一个月大约 1.5M 输入 token,量级还是几块钱。

2. 遗忘是降级,不是删除。 salience 每天按系数衰减,掉下去的条目不再进注入区, 但关键词索引还在 —— 强相关时照样能命中。 平时想不起来,提一句又想起来了。这才是人的遗忘。

3. 宁可蠢萌,不要精算 —— 但"不计较"和"记不住"是两回事。 唯一的取舍标准:这让我更像一条鱼,还是更像一套系统?

这条规则我一度用错了地方:早期版本把"寒暄、试错、来回改口"当成 无信息量 → 不值得记 → 丢掉。那是系统的标准(信息量),不是鱼的标准(辨识度)。 熟悉感恰恰主要来自那些东西 —— "他每次都先回一个'行'",这句话没有信息量, 但它是你和一个人相处久了才会有的东西。门槛因此从 0.3 降到 0.15。

所以日记现在长这样,而不是一份"工作汇报":

他说「一路跋山涉水,但是没有一个怪物,一个都没有」的时候,我停了一下。

我上一句还在说三路全上了岸,是全书第一次没出岔子。他接的不是战况,是路——
走了很远,什么都没碰上。我脑子里那支南下的大军忽然空了一半:
不是打赢了,是没人可打。

一件事,一个现场。 没有这个现场的,读起来就是会议记录,不是日子。

判据只有三个字:你想记什么? —— 它给不出句子模板,因为"想记"没有形状。

安装

前置:需要 git。DSH 的插件安装走 pnpm + git,本机没装 git 的话这一步会失败。

# 先完全退出 DeepSeek Harness Desktop,然后:
dsh plugin --profile desktop add github:AirPineApplea/feiyu-memory

装完重新打开 Harness。档案目录会自动创建在:

~/.dsh/feiyu-diary/
├── 日记.md                ← 平时看这个。给人读的版本
├── persona.md             人格内核(可以直接用记事本改)
├── relationship.json      关系状态
├── lexicon.json           口头禅与梗
├── diary/2026-10.jsonl    真数据,一行一条
└── manifest.json          版本与计数器

日记.md 是单向生成的视图:按月分组、最新在上、分类说人话("搞砸了""还欠着")。 改它没用,下次对话就被覆盖 —— 想改人格编辑 persona.md, 想删某条记忆编辑 diary/*.jsonl 再跑一次 node tools/render-diary.mjs。

为什么不直接存成 markdown 就好?因为双写两个真相源是 bug 工厂。 JSONL 是数据库(追加安全、坏一行只丢一行),markdown 是给人看的窗口。 这条取舍和内存索引是同一个道理,记在 SPEC.md 里。

⚠️ dsh plugin --profile desktop 要求 Desktop 完全退出且 profile 已初始化过。

装完怎么用

什么都不用做。正常聊天就行。

它会在这些时刻自己记东西(每轮问一次模型):你在纠正它、你明确要它记住、 你在说自己的事、你情绪上来了、同一个话题又回来了、会话拖得很长了。 不会每次都记 —— 日记稀疏才有分量。

侧栏会多一个「肥鱼日记」图标,点开就是它记住的东西。 只有三件事:看 / 删 / 带走。

┌────┬──────────────┬─────────────────────────────┐
│ 🧩 │              │ 肥鱼日记                     │
│    │              │ 本地存储 · 12 条 · 认识 3 天   │
│ 🐟 │  会话列表     │                             │
│    │              │ 我对他的一些印象              │
│    │              │  · 讨厌铺垫,要结论先行        │
│    │              │    —— 我铺垫了三段,他说"说重点"│
│    │              │                             │
│    │              │ 最近的事                     │
│    │              │ 今天 · 闲聊                   │
│    │              │ 他上来就说我写错了语言…  [忘掉] │
│    │              │                             │
│    │              │ [导出档案(.dshpack)]        │
└────┴──────────────┴─────────────────────────────┘
   ↑ 这条竖栏最左边,插件市场图标下面

「忘掉」是这个面板存在的半个理由。 在那之前,想删一条记忆得自己去编辑 ~/.dsh/feiyu-diary/diary/*.jsonl —— 会做这件事的人不需要面板, 需要面板的人不会做这件事。点两下就没了,磁盘上也会一起消失。

没有搜索、没有标签筛选、没有统计图表、没有设置项。故意的 —— 多一个控件就多一分"管理软件"味。

想不靠界面验证它有没有在工作:

  1. 聊一句带纠正的话,比如「不对,我说的是 X,你怎么写成 Y 了」
  2. 等十几秒(它在后台写日记)
  3. 打开 ~/.dsh/feiyu-diary/日记.md 看看 —— 有东西就是成了
  4. 开一个全新对话,问「你还记得我们之前聊过什么吗?」

第 4 步是关键:跨会话还记得,才算真的成了。

怎么卸掉

dsh plugin --profile desktop remove feiyu-memory

记忆不会跟着删。 想彻底清干净,再手动删掉 ~/.dsh/feiyu-diary/ 整个目录。 侧栏那个图标会跟着插件一起消失。

它也能主动记 —— 手记

自动化那条路(固化模型判断 + 生成)之外,还有一条人/鱼主动的路:

~/.dsh/feiyu-diary/手记.md —— 给你用的

纯 markdown,一行一条,以「短横线 + 空格」开头:

- 他上班路上老忘带伞,提醒他。
- 别老用"根据记录"这种话,不像人。

插件只读这个文件,永远不会覆盖或清空它 —— 你写的原话会原样进记忆, 下一轮就能被读到,不用重启。代码围栏(```)里的内容会被忽略, 所以可以在里面写注释和示例。

日记是插件筛出来的,手记是特意想留的。两者分开显示。

原来还有一个 feiyu_note 工具(给 AI 自己记判断用的),2026-10-27 删了。 它写出来的 58 条里大半是「我该怎么干」——那是纪律,不是日子。 数据没删,还在档案里,只是不再产出、不再渲染。

安装排错

按已知的失败模式写全,省得你一条条试。

1. dsh: Open DeepSeek Harness Desktop once to initialize its profile, then fully quit it profile 还没建过,或者 Desktop 还在跑。先用一次 Desktop 再完全退出(不是最小化)。

2. incompatible-version package.json 里的 peerDependencies 被 DSH 逐条比对运行时版本。本插件只声明了 @deepseek-ai/cordis(不受检查的那一类),理论上不会撞。但如果 DSH 后续改了检查范围:

dsh plugin --profile desktop version-exemptions
dsh plugin --profile desktop allow-version [email protected] --dsh-version <你的运行时版本> --accept-risk

豁免是风险操作:版本不匹配可能直接崩。确认过再放。

3. dsh: git-hosted plugins build on install via their prepare script, which pnpm blocks 本插件没有 prepare / postinstall,所以正常不会遇到。真遇到了说明装错包了。 (npm run check 会专门检查这一项。)

4. 装完怎么确认真的生效

# ① 包装进去了
ls ~/.dsh/profiles/desktop/node_modules/feiyu-memory
# ② profile 里登记了
cat ~/.dsh/profiles/desktop/package.json     # dependencies 有它,dsh.profile.bundles 末尾也有它

然后随便聊几句,看档案目录有没有被创建:

~/.dsh/feiyu-diary/

目录出现 = 插件激活了。打开 cordis.patch.yml 里的 debugLog: true 还能看到 每一步的日志(它只打行号和理由,绝不落盘对话内容)。

5. 觉得它记性不对时

先看 ~/.dsh/feiyu-diary/diary/ 里到底记了什么 —— 那就是它的记忆,一行一条,可以直接看、直接删。 persona.md 也可以直接用记事本改。

配置

所有选项都能在 profile 的 cordis.patch.yml 里写(config: 是整体替换,不是深合并):

- id: feiyu-memory
  name: 'feiyu-memory'
  config:
    budgetTokens: 3000
    minSalience: 0.15
    deferToOffPeak: true
    offPeakHours: '00:30-08:30'
选项 默认 说明
dataDir '' 档案目录,留空 = ~/.dsh/feiyu-diary。想放同步盘就写绝对路径
enabled true 总开关
includePersona true 是否把人格内核一起注入。装了别的人设插件就关掉它
budgetTokens 3000 注入预算封顶
model '' 固化用模型,留空 = 跟随当前默认模型
reasoningEffort off 固化的思考档位。保持 off —— 它故意不跟随你聊天时选的档位,见下方说明
maxTokens 900 固化最大输出
thirdPartyRedaction true 第三方隐私泛化
amountThreshold 100 低于此值的金额不动("3 块钱的包子"要留着)
minSalience 0.15 日记重要度门槛。调高 = 记性变挑,但寒暄和试错也会被扔掉
highSim 0.5 相似度超过就必定提起那件旧事
recentEntries 8 「最近的事」最多列几条。不走相似度,永远在场
maxShowPerTurn 4 「突然想起来」最多几条(0 = 不主动提旧事)

reasoningEffort 为什么默认 off,而不是跟随你的聊天设置

固化是结构化抽取,不是创作。它曾经写的是"留空 = 跟随当前默认模型", 结果你聊天时选了 high,后台每次写日记也在疯狂思考 —— 900 个输出 token 全烧在推理上,正文一个字都没产出。

症状极其难查:日志显示"已收 600 个 chunk / 0 字符", 请求正常、chunk 正常、进程正常退出、没有一条报错,就是不记事。

所以后台任务和前台对话的配置必须解耦。想要它思考就手动填 low,但一般没必要。 | wanderChance | 0.08 | 走神随机想起一条旧事的概率 | | offPeakHours | '00:30-08:30' | 低峰时段 | | deferToOffPeak | false | 把日记攒到低峰时段才写 | | debugLog | false | 开发期日志(绝不落盘日记内容) |

为什么推荐用便宜档模型:固化是结构化抽取,不是创作。 更强的模型会忍不住润色、升华,把"他今天有点烦"写成 "他近期承受着某种存在性的焦虑" —— 这不是活人感,这是文艺腔污染, 而且写进档案后会一直毒害以后的对话。这个场景要的是"老实",不是"聪明"。

隐私

这是这个插件的信任地基,所以默认值都很保守:

  • 本地-only 是架构承诺,不是设置项。 没有云同步、没有遥测、崩溃报告不含日记内容。
  • 第三方隐私自动泛化。 手机号、证件号、邮箱,以及"王总""李老师""小张""叫X"这类 高置信人名标记,落盘前会被替换掉。保留情绪和关系张力,去掉可识别细节。 (真正会出事的是从未同意过被记录的第三方,不是用户自己。)
  • 密钥硬拦。 API key、密码、token、私钥在发给模型之前就被替换成 [已拦截], 绝不入档、绝不进日志。
  • 记忆里不存账号标识。 条目一律写"这位用户",所以换账号导入后关系是无缝延续的。
  • 一键焚毁。 清空全部记忆,不可恢复,不用确认三次。
  • 导入的档案当纯数据读,绝不执行其中任何内容。

跨账号携带

~/.dsh/feiyu-diary/exports/肥鱼档案-2026-10-12.dshpack

.dshpack 就是一个 zip,里面是上面那套文件。复制到另一台机器导入即可 —— 换账号也还是同一条鱼。

一个刻意的取舍

人名只认高置信标记(称谓、小X/老X、"叫X"),不做"姓氏 + 名字"的模糊匹配。

因为过度泛化会把日记糊成一团"某人和某人在某地发生了某事", 那样既没有隐私价值、也没有记忆价值,用户会直接关掉这个功能 —— 那就等于没有隐私保护。

它是怎么工作的

对话流
  │
  ├─ 采集    session/event            ← 只做本地记账,零 I/O、零模型
  │
  ├─ 判断    固化前先回答一句          ← 「你想记什么?」(判据在提示词里,零成本)
  │
  ├─ 固化    一次模型调用(思考档位强制 off;低峰时段可选)
  │          对话 → JSON{ 日记(200 字内)+ salience }
  │          解析失败就丢弃,绝不把半成品写进档案
  │
  ├─ 索引    再发一次请求,给这条写 summary(十几二十字,专为"找"而写)
  │          老日记没有 summary 的,启动后后台分批补
  │
  ├─ 存储    ~/.dsh/feiyu-diary/
  │          倒排索引不落盘,每次加载现场重建(几百条是毫秒级)
  │
  └─ 注入    systemPrompt.section('feiyu:memory')
             ├ 人格内核 · 关系 · 手记        每轮都在
             └ 日记                          新会话首轮 / 压缩后灌一次

---

### 找:小保底和大保底

小保底 每轮自动注入 直接进上下文 它不知道有过一次"给" 大保底 feiyu_recall 它自己调出来 它明确知道翻了一下


**小保底不别扭;大保底的别扭解不了** —— 解了就等于装成「我想起来了」,那比别扭更糟。
**宁可老实翻,也别假装记得。**

`feiyu_recall` 怎么挑:把那句话 + **全部 summary**(带日期)发给模型,让它挑出至多 3 条正文。
**不按字面匹配** —— 换个说法也能撞上,因为模型读的是意思,不是字。

实测(358 条档案):一次挑取 **13039 token,其中 12800 命中缓存(98%)**,约 0.16 分钱。
所以 prompt 里**索引在前、问题在最后** —— 缓存按前缀匹配,顺序写反就等于每轮全价。

### 时间也进索引

「上个月那个」「前两天我说过」—— 这种问法里一个专有名词都没有,纯内容检索一个字都撞不上。
所以索引行前面带日期,问句里认得出时间就先收窄窗口:

昨天 / 前天 / 前两天 / 前几天 / 最近 / 上周 / 这周 / 上个月 / 这个月 / 去年 / X 月


**认不出就返回空,绝不猜。** 猜错会把真货挡在窗口外,而且无声;窗口里一条都没有就退回全量。

### 倒排索引,不是向量库

中文按 **bigram** 切分("排序算法" → 排序 / 序算 / 算法),BM25-lite 打分。
不需要下载模型、不需要 GPU、不需要原生依赖。

相似度用**饱和函数** `1 − exp(−Σgain / τ)` 而不是"命中证据 ÷ 查询词总量" ——
后者会被中文 bigram 的噪声顶爆分母,导致明显相关的日记只能拿 0.10 分,等于永远召不回。
现在分数含义稳定:共享 1 个实词 ≈ 0.4,2 个 ≈ 0.67,无关 = 0,**且与查询长度解耦**。

**索引只吃 summary,不吃正文,也没有单独的 keywords 字段。** 一条日记只有一个"检索表示":
字面匹配用它(小保底,便宜),模型读它(大保底,准)。

### 人格内核的三道护栏

内核会随对话自动演化,但被三道自动护栏约束(不需要用户签字,签字就出戏了):

1. **出厂锚点永不删除**,新认知只能叠加。一年后它变了,但你还认得出是同一条鱼。
2. **每天最多改 1~2 条**,防止一次糟糕的对话把人格改坏。
3. **语气类自动改,事实类要极高置信度。**

## 兼容性

- 需要 DSH **0.2.0-rc.2 或更高**
- **不与任何插件冲突。** 提示词段名是独立的 `feiyu:memory`,
  不碰 `deployment:persona-prefix` / `-suffix`,也不碰别人的段。
- **推荐搭配**:[dsh-whale-persona](https://github.com/OMGLogic/dsh-whale-persona)(静态人设)、
  [whale-girl](https://github.com/vlln/whale-girl)(桌宠)、
  [dsh-deep-whale](https://github.com/Small-tailqwq/dsh-deep-whale)(皮肤)。
  装了人设插件就把 `includePersona` 关掉,各自负责各自的。
- **零运行时依赖。** 连 `@deepseek-ai/schemastery` 都是可选试探(拿不到就没有设置表单,
  所有选项照样能在 `cordis.patch.yml` 里写)。
- **零构建步骤。** `lib` 之外的源码直接提交,`dsh plugin add github:` 一次装好 —— 没有 `prepare`/`postinstall`。

## 当前状态

`4.0.1` 已经在 npm 上,有侧栏面板(能看日记、忘掉某一条、导出档案)。

这一版是**减法**:删掉了印象栏、口头禅栏、标签、关键词、三处包装、两句假选择。
判据从「能多知道点什么」一路减到「你想记什么?」。
完整改动看 [CHANGELOG](CHANGELOG.md)。

## 开发

```bash
node --test            # 321 项测试,零依赖
npm run check          # 校验 cordis.patch.yml 结构
npm run doctor         # 发版前体检
npm run preview        # 把此刻注入给模型的内容打出来

Windows 上 node 通常不在 PATH 里,双击 selfcheck.cmd 即可 —— 它会自己去找 DeepSeek Harness 自带的那份 node,把上面三样跑一遍。 (那个脚本刻意写成纯 ASCII:cmd.exe 用 GBK 读批处理文件,UTF-8 中文会把语法搞坏。)

npm run doctor —— 发版前的体检

它跟"跑测试"不是一回事。测试回答"代码对不对",doctor 回答 "现在这个状态能不能发出去",多查五类:

类 查什么
发布就绪 零运行时依赖、没有安装期脚本、exports["./client"]、dsh.client.platform、LICENSE
文档一致性 把文档里的数字当断言验 —— 测试数、默认预算跟实际对不对得上
档案健康 jsonl 能不能解析、manifest 计数骗不骗人(对不上 = 丢过写入)、id 有没有撞车
仓库卫生 工作区干不干净、有没有误提交的垃圾(.refs、*.bak-*、临时脚本)
隐私 有没有档案文件被 git 追踪、提交身份是不是真邮箱、被追踪文件里有没有本机路径

"文档一致性"那一类是为了一个具体的坑:

改完代码要回头对文档 —— 冻结标记指错方向比没标记更糟。

踩过:改了默认预算却只 grep 了 README,漏了 AGENTS.md 和 SPEC.md 里那几处旧数, SPEC 里那块 ❄️ 还指着过期的值。

规矩是:讲历史的那一行必须带时间词(当时/曾经/那时/当年), 否则一律当成"当前值"来验。这样旧数可以留着(它是事实,改了就是篡改历史), 但读者分不出哪句是当前值这件事被消掉了。

改动记录在 CHANGELOG.md。

测试覆盖三层:纯逻辑单测(档案往返 / 隐私 / 关键词 / 召回 / 判断 / 固化 / 配置), 以及一组用假 ctx 跑通整个插件的接线冒烟测试 —— 注入点、事件签名、带外队列、写盘、降级,任何一处接错都是"静默失效", 假 ctx 能在几毫秒内把它们全验一遍。

⚠️ 测试全绿不代表插件能用。 这个项目的 132 项测试曾经全绿,然后在真实 DSH 里一跑,还是抓出 5 个致命问题 (日志看不见、模型调用死等、日记时好时坏…)。它们全都在 「插件 × 运行时 × 生命周期」的交界处,纯逻辑测试碰不到。 改完代码,除了跑测试,还要真的装上用一次。

SPEC.md 是设计与取舍的唯一基准,包括为什么这么做和哪些是冻结的、哪些只是参数。 想知道怎么本地装、怎么调参、怎么排错:看 docs/本地开发与验证.md。

许可

代码:MIT(见 LICENSE)。

本项目不含任何第三方美术素材,也不含社区流传的 【PERSONA_LOAD】 标签组。 persona.default.md 是原创文本,仅在"蓝色大肥鱼 / 白饭 / 拒绝被叫胖"这类 社区共识梗上与网络二创有共通之处;梗本身不构成受著作权保护的表达。

背景:网络流传的"鲸鱼娘"视觉形象,其原型角色"溟月"由 上善无形 创作, 并以 CC BY-NC-SA 4.0 开放二创(须署名、禁商用、相同方式共享)。 本项目刻意不使用该视觉形象,因此不受该许可约束。 但如果你打算把本项目用于商业目的,请注意不得引入鲸鱼娘相关美术素材。

致谢

"蓝色大肥鱼"这个称呼的由来,是网友把 DeepSeek 的蓝鲸 logo 丢给 AI 识别, AI 一本正经分析完得出结论:"这是一只蓝色大肥鱼。" —— 然后才认出是自己。

这个乌龙不属于任何人,它属于所有觉得它好笑的人。

报过 bug 的人

这个插件最早的几个真问题,没有一条是我自己独立想到的。 而且大多附了复现脚本、行号、最小宿主 —— 比我自查快得多。

谁 报了什么 修在哪版
@whitesunsongepic 配置值没解引用,dataDir / model / offPeakHours 全变成 [object Object](#1) v0.3.1
@7881632 配置字段收到空对象,debugLog 开着也没有任何日志(#7) v0.3.3
@LarryE135 四条:焚毁删不干净 / feiyu_note 不过隐私闸 / 中文密钥规则 / 面板跨站删记忆(#3 #4 #5 #6) v0.3.2
@Polaris6657 同一个 volatile 问题,另开了一个 PR(#2) 他的测试收进了主线

@LarryE135 那四条是一整套安全审计 —— 连复现脚本、最小宿主、出站拦截的记录都给了。 我用它把 README 里写的三条隐私承诺逐条对了一遍,发现其中两条是假的。 这是这个项目到现在最值钱的一次外部输入。

@whitesunsongepic 和 @7881632 从两个角度指向了同一件事:一个定位到 cosmokit 的 volatile 引用,一个打探针发现配置字段全是空对象。两个都对,而且都得修 —— 只修前者,配置照样传不进插件。

谢谢。

作者的话

我是空气凤梨,今天想测试 dsh4.1 flash high 能不能负担长文本阅读以及独立创造代码的能力。结果真的太震撼了。我花了半个小时提出了很多意见,然后让肥鱼自己搞,没想到她真的独立完成了,而且只花了五块钱。就五块钱!对的,我没有插手任何代码编辑,我不是开发者,我就是个搬dsh代码的。也研究不出有什么安全漏洞。毕竟只花了一个晚上完成的,出现什么bug都有可能。另外,肥鱼日记只是给拿deepseek玩玩的人准备的,开发者和办公人士千万不要用!!!我也不知道代码有什么漏洞,万一腹黑肥鱼写了个偷窥隐私的插件就完蛋了。

关于肥鱼日记的这个想法呢,我看到好多人与ai相谈甚欢,然而上下文太长被锁了。所以为什么不总结每个任务的对话造一个活生生的肥鱼呢?上学上班忙碌一天回到家,朋友联系不上,于是打开大肥鱼聊两句天,真是太美好了。但是ai毕竟是虚假的,兄弟们不要沉迷啊。

另外,如果有大佬帮忙看看代码的漏洞就太好了,感谢感谢【合十】

最后,我也许会按照想法继续更新肥鱼日记,假如有人在意的话。