dsh-cat-diary:四栏日记与好感度,让 DSH 新会话记得昨天

前言

在 DeepSeek Harness(DSH)里做长期陪伴或角色扮演时,常见问题是:新开一轮对话后,模型对「昨天聊过什么」只有模糊印象,好感、约定、小习惯也很难稳定延续。有人靠手动粘贴摘要,有人靠外部笔记,但和宿主会话、换日边界、每轮状态更新往往对不齐。

dsh-cat-diary(维护者 AsterLuo,社区分类:记忆)把「按自然日归档对话 → 写成结构化日记 → 次日注入速读卡」和「每轮自动判好感、账本唯一写入」放在同一套存储里,好感度子插件随主包安装,无需单独装包。下面介绍它做什么、怎么装、怎么用,以及无 Web 侧边栏时如何靠 CLI 替代。

这是什么

一句话:为 DSH 做的「猫娘日记 + 好感度」插件——每天把当天全部对话写成一篇四栏日记,第二天新开对话时自动注入「昨日速读卡」;好感度每轮由宿主在 agent/pre-step 首步判定,侧边栏(若宿主支持)可看分数走势、加减原因和最近 7 天日记。

核心功能

日记主体

流程可以概括为:采集会话 → 模型写前三节(知识、感想、印象)→ 第四节由代码生成(不是模型自由发挥)→ 写入存储目录。换日由 cutoffHour 控制(默认凌晨 5 点前的对话算前一天)。

设计上是开机补写而不是定时任务:日界在 05:00 之后日记才「该写」,但那个时刻机器常关机,定时器不会响。因此每次 DSH 启动时检查「这一天已结束但 days/<day>.md 还不存在」就补写一次;已有文件一律不覆盖(含你手改过的)。补写幂等,重启多次也只写欠下的那一天。

新会话侧:昨日内容会以速读卡形式注入上下文(briefBytes 等配置控制体积),核心价值被作者概括为「新会话能自动记得昨天」——面板只是可视化,不是必需品。

好感度子插件

每轮判定一次,但有日额度与单步上限(见配置 maxStep、maxDaily)。十档状态,每 20 分一档(例如 80~100「心之所向」,-100~-70「关上了门」,完整表见 README)。

五条结构约束里和日常运维最相关的是:

  1. 好感度账本是唯一写入方——日记、速读卡、长期记忆、UI 都是读者,不会出现「日记写 74、账本写 70」的分叉。
  2. 每轮必判,但不代表每轮必变;判定失败会落盘 failed 记录,不会伪装成「不变」。
  3. 人格 id 只解析一次(resolvePaths().person),日记与好感度必须用同一个 person(或成对的环境变量)。

侧边栏与模型选择器(可选)

宿主具备 sidebarRightTabs / sidebarRight 时,可挂只读面板:分数、状态、走势、加减原因、最近 7 天日记,顶栏左侧为模型设置、右侧为刷新。没有侧边栏时,日记补写、每轮判分、速读卡注入、CLI 仍照常;模型选择可改配置里的 autoWriteRoute 等价替代。

补写日记与判好感对模型要求不同:前者宜长文与理解力,后者要快、稳、便宜(判分约 12 秒超时)。面板保存的路径为:

<DSH_HOME>/storages/dsh-cat-diary/<人格>/autoWriteRoute.json

优先级:面板保存值 > cordis 里的 autoWriteRoute > 宿主默认模型。判分侧通过跨包只读约定读同一文件(plugins/dsh-affinity/lib/judge-route.js),不写分数。

安装与启用

推荐从 GitHub 安装(命令来自 README,请将 <你的profile> 换成实际 profile 名):

dsh plugin --profile <你的profile> add github:AsterLuo/dsh-cat-diary

指定版本示例:

dsh plugin --profile <你的profile> add github:AsterLuo/dsh-cat-diary#v1.1.0

也可在 Releases 下载 dsh-cat-diary-v1.1.0.zip,解压到 <DSH_HOME>/profiles/<profile>/node_modules/dsh-cat-diary/,再在 profile 的 package.json 与 dsh.profile.bundles 中登记依赖。

Node 引擎要求(package.json):^22.19.0 || >=24.0.0。

在 profile 的 cordis.patch.yml 里只覆盖、不要重复 insert 两个插件块(节选):

- id: cat-diary
  disabled: false
  config:
    person: default
    cutoffHour: 5
    briefBytes: 6000
    autoWrite: true
    autoWriteDelayMs: 8000
    autoWriteMaxDays: 7
    autoWriteMaxTokens: 3200
    autoWriteRawChars: 24000

- id: affinity
  disabled: false
  config:
    maxStep: 4
    maxDaily: 16
    stepJudge: true
    person: default

cat-diary 与 affinity 的 person 必须一致;也可用环境变量 DSH_CAT_DIARY_PERSONA 与 DSH_AFFINITY_PERSONA,但两者仍须相同,否则会写到不同目录(README 曾记录第四节显示「账本为空」的真实故障案例)。

典型用法

CLI(无面板或脚本运维)

在插件目录或通过 node bin/diary.mjs:

node bin/diary.mjs status         # 当前分数、日记数、今日状态
node bin/diary.mjs open           # 昨日速读卡
node bin/diary.mjs show --date D  # 某天的完整日记
node bin/diary.mjs list           # 列出所有日记
node bin/diary.mjs affinity show  # 好感度账本(只读)

补历史与成本预估:

node bin/diary.mjs backfill --days 7 --dry-run

知识检索:node bin/diary.mjs knowledge [关键词]。

数据落盘位置

日记与人格相关:

<DSH_HOME>/storages/dsh-cat-diary/<人格>/
  days/2026-11-01.md
  days/2026-11-01.meta.json
  raw/2026-11-01.md
  autoWriteRoute.json

好感度权威账本:

<DSH_HOME>/storages/dsh-affinity/<人格>/
  affinity/events.jsonl
  affinity/state.json          # 派生缓存,手改无效

卸载插件不会删除上述数据。

适用场景与注意

适合谁:需要在 DSH 里做按日记忆、次日自动续上下文、并希望在对话节奏上叠加可审计好感变化的场景(角色扮演、长期协作 persona 等)。TUI 或纯命令行宿主没有 Web 渲染层时,客户端面板不会加载,后端日记与判分仍可用 CLI 查看。

安全与权限:插件以当前 DSH 进程权限读写 <DSH_HOME>/storages 与会话采集路径;安装前请自行审阅源码与 MIT 许可证,社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

运维提示:默认模型若指向未注册的 provider,补写与判分可能一起失败,外部表现可能只是「今天没有日记」;可为 diary / judge 分别钉模型。判分失败请查账本中的 failed 记录,不要假设「本轮没变化」。

开发者自测:npm test(README 写明 143 项测试);隔离验证可用 node scripts/prove-isolation.mjs,避免测试误写真实 sessions。

结尾

dsh-cat-diary 把「日归档 + 速读注入」和「每轮好感判定 + 唯一账本」绑在同一套人格路径与约束里,减少记忆与分数两套叙事。若要进一步了解参数与模型选择器细节,以 GitHub README 为准。

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

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

小夜