dsh-fish-dream:给 dsh-fish 桌宠拼一场可追溯的「梦的种子」

前言

跑在 DeepSeek Harness(DSH)上的 dsh-fish 会把对话、听见的话、日记等落成一条事件流。若希望「她安静一段时间后,记忆里被重拼成一场梦,再由她自己把梦写完」,常见做法是整段调用模型生成梦文,成本高、难复现,且容易把梦写成新事实写回事件流。

dsh-fish-dream(维护者 xxxiii)是 dsh-fish 的外挂插件,归类为「记忆」。它只读 ~/.dsh-fish 里真实发生过的事件,按沉默时长与六种梦理论之一选出碎片,拼出「梦的种子」;梦文仍由她在自己的会话里完成,插件本身不调用模型。下面介绍它解决什么问题、如何安装与配置。

这是什么

dsh-fish-dream 做一件事:在她不说话的时候,给她一场梦的准备材料,而不是直接输出梦的故事正文。

  • 每一块梦材都对应事件流里的原始 id(ev_...),可追溯;
  • 取材策略由随机抽中的「梦理论」决定,荒诞度与叙事骨架随之变化;
  • 成文的梦由她在会话中调用工具写完,口吻仍是她自己的。

插件不训练模型、不做心理诊断,也不解释梦;只是把「梦怎么从记忆里拼出来」做成一套可运行、可查看、可改的规则。npm 包版本为 0.1.0,MIT 许可证,零 npm 依赖,要求 Node ≥ 20。

设计要点

梦是重拼,不是新造

碎片只从 ~/.dsh-fish/events.jsonl 读取。她写梦时要填 refs,因此梦不会变成新事实:events.jsonl 不会被插件写入,deriveSelf 也看不到梦。

插件不调用模型

选材、抽理论、定荒诞度、给叙事骨架均为纯函数;语言生成留给会话里的模型。好处是无额外 token 成本、无 API key、结果可复现,且 README 标明当前有 55 个测试通过。

沉默是唯一时钟

不按钟点假设「夜里才做梦」。每次检查看距离她最后一次对话多久,再查表掷骰。「对话」只计 heard、utterance、voice 三类事件;meta、日记、梦本身不算。她一旦开口,沉默计时归零;同一段沉默最多一场梦。

确定性

种子由「沉默起点 + 时间槽 + 事件流长度 + 最后一条事件 id」播种。同一段沉默、同一份事件流,抽到的假说和碎片一致,便于复现与测试。

运作流程

数据与职责大致如下(摘自 README 流程说明):

~/.dsh-fish/events.jsonl  (只读)
  → collectFragments → shouldFormDream → pickHypothesis
  → pickFragments → composeSeed
  → ~/.dsh-fish-dream/dreams.jsonl (status=pending)
  → system prompt 提示「有一夜你做了一个梦」
  → 她调 dream_recall 取种子 → dream_record 落库

默认每 tickMinutes(15 分钟)检查一次。沉默越久,单次检查触发梦的概率越高(例如少于 2 小时为 0%,2~4 小时 5%,超过 48 小时 90%)。详细概率表见仓库 README。

记忆碎片从 utterance、heard、voice、revise、refusal、narration、reunion、answer 等类型中筛选,并排除 seed、meta、dream、diary、ask。插件内置六个可配置权重的假说(记忆巩固、威胁模拟、情绪调节、连续性、预测加工、社会模拟),每次按权重随机选一个,再挑 2~5 条碎片组成种子(场景、人、感觉、荒诞规则、三段走向、最后一帧等)。假说名称与文献依据只写在 dreams.jsonl,不进入她读到的种子正文。

核心功能

  • 沉默驱动:按距最后一次对话的时长查表掷骰,不绑定固定夜窗。
  • 六个理论随机取材:同一段日子,不同次梦的拼法可能不同。
  • 可追溯:梦材指向真实事件 id,不写回 fish 事件流。
  • 她写梦,插件只给结构:零额外模型调用成本(由插件侧完成的部分)。
  • 只读 fish 记忆:~/.dsh-fish 只读;插件数据在 ~/.dsh-fish-dream。
  • 三个工具:dream_recall、dream_record、dream_now(后两者需在 dsh-fish 工具白名单中放行)。
  • 失败安静:注册或写盘失败只记日志,不影响她正常说话。
工具 作用
dream_recall 有 pending 梦则返回种子与写法提示;否则返回最近记下的梦(limit 1–20,默认 3)
dream_record 把梦文记入 records.jsonl 与 dreams/YYYY-MM-DD.md(text 必填,refs 1–6 个碎片 id)
dream_now 跳过沉默表与掷骰,立刻拼一场(调试用,可选指定 hypothesis)

安装与启用

前提:已安装并运行 dsh-fish,且本机 Node ≥ 20。

从 npm 安装(推荐)

包名 dsh-fish-dream,发布在 npmjs.com/package/dsh-fish-dream。

pnpm add dsh-fish-dream --dir ~/.dsh/profiles/desktop

把 "dsh-fish-dream" 加入 ~/.dsh/profiles/desktop/package.json 的 dsh.profile.bundles,然后重启 DSH(刷新页面不够,插件在进程启动时加载)。README 说明预构建安装不需要 allowBuilds 构建授权。

放行工具

编辑 ~/.dsh-fish/config.json,在 tools.allow 中加入 "dream_recall" 与 "dream_record"。dsh-fish 用白名单收窄她的工具面,未列入的工具她无法调用。

装好后可在浏览器控制台查看会话,或让她说一句「做个梦试试」做粗测。若需从源码以 link: 方式安装,步骤与 pnpm 注意事项见 GitHub README「从源码装」一节;用户规则下本文不展开 git clone 命令。

package.json 中声明的 DSH 兼容范围为 >=0.2.0-rc.1 <0.3.0-0。

配置

首次运行会在 ~/.dsh-fish-dream/config.json 写入默认值,字段均可选。示例(与 README 一致):

{
  "auto": true,
  "dreamTable": [[2, 0], [4, 0.05], [6, 0.15], [8, 0.3], [12, 0.5], [18, 0.65], [24, 0.75], [48, 0.85], ["inf", 0.9]],
  "minFragments": 3,
  "maxChars": 400,
  "pendingHours": 36,
  "staleDays": 5,
  "tickMinutes": 15,
  "lucidity": 0.03,
  "prompt": true,
  "promptOrder": 8550,
  "weights": { "threat_simulation": 0.2 }
}

常用项:auto 关闭则不再自动做梦(仍可用 dream_now);dreamTable 控制沉默小时数到单次检查概率的映射;minFragments 碎片不足则不做梦;pendingHours 控制未写完种子的作废时间;prompt 控制是否在 system prompt 挂上「有一夜你做了一个梦」提示(仅 cwd 在 ~/.dsh-fish 下的会话,用户侧对话历史不可见)。

典型用法

  1. 保持 dsh-fish 事件流正常积累,并让她在足够长的沉默后由插件生成 pending 种子。
  2. 她在自己的 fish 会话里根据 system 提示,调用 dream_recall 读取种子与写法要求(第一人称、现在时,约 150–400 字,需带 refs)。
  3. 写完后调用 dream_record 落库;回执仅为 [记下了],避免把工具回执当成继续闲聊的内容。
  4. 调试时可调用 dream_now 立即拼一场,必要时在 config.json 的 weights 里调整各假说权重。

适用场景与注意

适合:已在用 dsh-fish、希望给桌宠增加「沉默后.memory 重拼 + 自述成梦」体验,且希望插件侧逻辑可测、可复现的开发者。

注意:

  • 插件以当前 DSH 进程权限运行,安装前建议阅读 仓库源码 与 MIT 许可证。
  • 梦是叙事重拼,不是心理治疗或诊断工具;六个理论在插件里是取材策略,不是科学结论。
  • 社区目录 SkillHub 上的 dsh-fish-dream 页 与 GitHub 为独立信息来源,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-fish-dream 把「安静够久之后,从真实事件流里按规则拼梦的种子,再由她自己写完」收拢成一个小而完整的 DSH 插件:只读 fish、数据落在 ~/.dsh-fish-dream、不调用模型拼种子。进一步了解可看 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜