xingyueDanYang/dsh-puppet-memory ↗★ 0

dsh-puppet-memory

木偶记忆(Puppet Memory):DSH 跨会话记忆插件。三层记忆(行为/深层/阵列)+ 600 字常驻核心卡 + 三线状态(工作/陪伴/学习)+ 多人多群记忆(身份归一、分区可见性、按场景注入)+ 会话级记忆管理(屏蔽/删除脏片段)+ 自动摘要与事实候选 + 小模型路由 + 家目录备份与自检。零依赖、纯文本、MIT。 适合需要AI长期记住用户设定、群聊身份及历史事实,避免记忆污染的用户。

Package
dsh-puppet-memory
Compatibility
Unverified
Version
0.29.1
License
MIT
Last updated
Oct 23, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:xingyueDanYang/dsh-puppet-memory

配置

~/.dsh/memory/config.json:

{
  "enabled": true,
  "inject": {
    "maxChars": 1600,
    "mode": "first-step",
    "core": { "enabled": true, "maxChars": 600, "everyStep": true }
  },
  "backup": { "enabled": true, "dir": "C:\\Users\\你\\.dsh\\memory-backups", "sessions": true },
  "sessions": { "disabled": [] },
  "autoSummary": {
    "enabled": false,
    "onCompaction": true,
    "onSessionEnd": true,
    "minTurns": 2,
    "maxInputChars": 8000,
    "maxOutputChars": 400,
    "maxTokens": 0,
    "timeoutMs": 20000,
    "minIntervalMs": 60000,
    "model": null
  },
  "facts": {
    "enabled": false,
    "maxPerRun": 6,
    "maxInputSummaries": 8,
    "maxTokens": 3000,
    "timeoutMs": 20000
  },
  "lines": {
    "enabled": true,
    "baseline": { "work": 0.3, "companion": 0.4, "learning": 0.3 },
    "halfLifeMinutes": { "work": 20, "companion": 90, "learning": 45 },
    "cooldownMs": 30000,
    "switchHysteresis": 1.3,
    "worklogTransferMinutes": 300
  }
}

环境变量 DSH_MEMORY_DIR 可改记忆根目录(默认 ~/.dsh/memory),测试/迁移/只读环境下都用它。v0.25 起备份默认落 ~/.dsh/memory-backups;旧机器已有的 F:\dsh-memory-backup 配置不受影响,但盘不在时会自动回退到家目录并提示。

配置

"lines": {
  "enabled": true,
  "baseline": { "work": 0.3, "companion": 0.4, "learning": 0.3 },
  "halfLifeMinutes": { "work": 20, "companion": 90, "learning": 45 },
  "strongThreshold": 1.0,
  "intensity": 0.35,
  "cooldownMs": 30000,
  "switchHysteresis": 1.3,
  "anchorSimilarity": 0.5,
  "worklogTransferMinutes": 300,
  "historyMax": 500
}

关掉(enabled: false)就完全回到 v0.22 的行为:不检测、不注入、不写轨迹。

4. 全量回退 profile 配置(安装前备份)

Copy-Item 'D:\Documents\deepseek-harness\backups\dsh-profile-20261020b*' 'C:\Users\Administrator.dsh\profiles\desktop' -Force


插件自身异常只影响它自己(工具不注册 / 注入为空),宿主启动时会记录错误但继续跑;排查看 `~/.dsh/memory/diag.log`。

## 版本历史(近期)

- **0.29.0(2026-10-23)**:**移除数值化好感度**(v0.27 的 `affinity`)——用户指出「每次都是好感度 100 的你还是你吗」:把关系压成分数,等于把「亲近」变成可以刷的指标,注意力会跑到数字上、离开当下。现在关系只记**具体发生的事**(facts / events / 群角色 / 熟悉度等级),不做任何自动加减分、不设「亲密值」;`memory_person` 去掉 `action=affinity` 与相关字段;旧数据里的 `affinity` 字段忽略不读,不迁移、不删除(留着也不影响)。核心卡新增一条红线:「关系不做好感度/分数,不为刷亲近表演」。
- **0.28.0(2026-10-23)**:会话记忆管理——防止脏记忆污染上下文。新增 `state/session-memory.json` 屏蔽表(只影响本会话注入,数据不删);`memory_forget` 工具(list / overview / suppress / unsuppress / delete);删除只动本会话片段(turn 日记、自动摘要),删前归档到 `behavior/archive/deleted-*.jsonl` 并摘掉索引/引导指针;注入层支持条目与整块(core / state / social / persona)屏蔽;API 加 `session-memory` / `session-suppress` / `session-unsuppress` / `session-delete` / `session-toggle`;设置页新增第三页 **会话记忆**(选会话、逐条屏蔽/删除、暂停注入);新增 `test/session-memory.mjs`(27 项,含 pre-step 端到端)。
- **0.27.0(2026-10-23)**:人物亲近度——人实体加 `affinity`(0–100,普通人 50 / 主人 65)+ `affinity_manual` 锁;从每条用户发言里读态度信号(夸 +0.8 / 骂 −1.2 / 问号 +0.2 / 长消息 +0.1,可配),认不出人跳过、绝不凭猜改分;pre-step 自动更新(diag 有记录);`memory_person` 新增 `action=affinity`(改分 / 上锁),`get` 显示亲近度;新增 `test/social-affinity.mjs`(26 项)。**(v0.29 已移除该功能,见上)**
- **0.26.0(2026-10-23)**:小模型路由——`autoSummary.model` / `facts.model` 可配 `{provider, model}`(本地 Ollama、OpenAI 兼容端点都行),摘要和事实提炼不再必须占用主会话模型;指定的路由**调用失败会自动回退**主会话模型(diag 记一行,摘要照常写盘);设置页「自动摘要」加「模型路由」两行输入(留空 = 跟随主会话),保存接口带逐字段校验(只给 provider 或只给 model 会被拒);`auto-summary-integration` 测试扩到含路由断言(走指定路由 / 坏路由回退 / 事实提炼独立路由)。
- **0.25.0(2026-10-23)**:可移植性——默认备份目录从 `F:\dsh-memory-backup` 改成 `~/.dsh/memory-backups`(多数机器没有 F 盘),配置目录写不了时**自动回退**到 `/backups` 并在返回信息里说明;启动时目录不可写不再让插件整体失败(降级 + 诊断 + 工具照常注册);新增 **`memory_doctor`** 自检(记忆目录/备份目录/剩余空间/关键文件/social·state·assets/设置页接口/会话沙箱/版本,只读);澄清「会话沙箱只约束工具子进程,不限制插件写家目录」并写进 README;新增 `test/doctor.mjs`(29 项,含回退后真备份、坏目录自检、启动不炸)。
- **0.24.0(2026-10-23)**:设置页拆成两个独立页面——`settings.section#puppet-backup`(记忆备份:状态 / 策略 / 上下文压缩 / 待确认事实)和 `settings.section#puppet-autosummary`(自动摘要:开关 / 触发条件 / 保留上限 / 列表);两页的操作按钮都用粘性操作条固定在页面顶部,不再被卡片挤到最下面;`backup-client` 测试改成渲染两页做内容拆分断言(29 项)。
- **0.23.0(2026-10-23)**:三线状态(工作 / 陪伴 / 学习)——词表检测(三线各一套,两字以上防误伤)+ 归一化 + 独立半衰期指数衰减(20/90/45 分钟,可配)+ 同线冷却 + 反向迟滞 + 话题锚点恢复 + 5 小时无工作信号转工作日志(写 `notes.jsonl`,不调模型);状态只决定「这一轮怎么说话」,注入 `
` 只给定性、永不给百分比,并按取向调整关系/便签/笔记的注入预算;新增 `memory_state` 工具(read/history/tune/reset,tune 30 秒冷却)与 `memory_stats` 的 state 一行;新增 `test/state-lines.mjs`(49 项,假宿主真跑 apply/pre-step)。思路参考伴行 weights.js(MIT),代码重写。
- **0.22.0(2026-10-23)**:核心记忆(`behavior/core.md`)——600 字预算的小文件,**每步缺就补**地注入(内容不变不重复;`first-step` 模式只约束完整摘要,不约束它;压缩后自动补回),优先级高于其它记忆;它的字数**先从 `inject.maxChars` 总预算里扣**,注入总量不变长;新增 `memory_core` 工具(get/set/append/clear,`set` 超 2×预算拒绝、`clear` 先归档)与 `memory_stats` 的 core 一行;新增 `test/core-memory.mjs`(38 项,假宿主跑真 apply/pre-step,含压缩补回与预算扣减断言)。
- **0.21.0-a.1(2026-10-23,a 测)**:多人记忆骨架——新增 `social/`(entities / edges / facts / events / pending-identity / scenes),身份归一(平台 id 直命中;昵称+头像+共现群只提案,**合并必须人确认**,无自动合并路径),四分区可见性(self / person@group / group / shared),按场景注入(`social.enabled` 默认 false,认不出场景不注入,关着注入时工具仍可读写),四个工具 `memory_person` / `memory_identity` / `memory_group` / `memory_visibility` 与 `memory_search scope=context`,`memory_stats` 多一行社交统计;新增 `test/social-model.mjs`(56 项)与 `test/social-acceptance.mjs`(54 项:五条验收 + 三条注入红线);**旧三层零改动**。

- **0.19.0(2026-10-21)**:三期候选进设置页面板——新增「**待确认事实**」卡片(层/关键词/正文/理由/时间 + 采纳/拒绝按钮);API 加 `GET ?action=fact-candidates`(列表 + pending/accepted/rejected 统计)、`POST ?action=accept-fact {id}`、`POST ?action=reject-fact {id}`(缺 id 400、找不到 404、非回环 403);`test/fact-candidates.mjs` 扩到 41 项(含面板 API 六组用例)。至此三期闭环:助手提炼 → 人自己点 → 写记忆。
- **0.18.0(2026-10-21)**:压缩记录层并入木偶记忆——只吃官方 `compaction/start|summary|end` 事件,按 `compactionId` 去重落 `deep/compaction-log.jsonl`(字段来自 `shadowedSeqs` / `shadowedTokenCount` / `provider` / `model` / `usage`,`sourceCommandId` 在=手动 `/compact`,不在=自动);**移除 turn-stopping 扫 `compress` 工具调用的旧路径**,修掉「重启后历史被重复计数」bug;面板压缩卡片加「最近压缩记录」,并标注第三方控制面(`dsh-compact-suite`)是否接管阈值/摘要模型;新增只读契约 `GET ?action=compaction` 与第十套测试 `test/compaction-records.mjs`(24 项)。
- **0.17.0(2026-10-21)**:三期「稳定事实候选」——`memory_facts` 工具(`list` / `extract` / `accept` / `reject`);提炼结果只写 `deep/fact-candidates.jsonl`(`status:"pending"`),`accept` 是唯一会写 `user`/`relation`/`saying` 的入口,`reject` 只改状态;带 `facts` 配置段(默认关)、去重(与已有记忆和所有历史候选比对)、`state.facts.processed` 防重复提炼、`memory_control status` 多一行待确认计数;新增第九套测试 `test/fact-candidates.mjs`(33 项,含「提炼不动记忆层」的红线断言)。
- **0.16.0(2026-10-21)**:设置页加「**自动摘要**」卡片——`GET ?action=autosummaries` 列出最近条目(时间/原因/回合数/正文前 400 字),`POST ?action=delete-autosummary {hash}` 按 hash 前缀删一条(同步清 `deep/guide.jsonl` 同 hash 的 `kind:"diary"` 行,不碰原始会话和手写日记);新增 `listAutoSummaries` / `deleteAutoSummary` 与第八套测试 `test/auto-summary-panel.mjs`(28 项,`DSH_MEMORY_DIR` 临时目录隔离)。
- **0.15.1(2026-10-21)**:加「压缩引擎自检」——每个会话第一回合 `turn-stopping` 时,往 `diag.log` 打一行 `压缩引擎自检(session=…):compaction=有/无,tokenMeter=有/无`(`agent.ctx.get("compaction")`)。目的:不依赖人手动发 `/compact`,重启后看日志就能确认官方引擎到底挂没挂上(`cordis_inspect_query` 的 Service 目录是静态 API 清单,不是活体证据,别拿它当结论)。
- **0.15.0(2026-10-21)**:压缩信号改「原生优先」——`isCompressionEvent` / `compressCallsIn` 同时认 `compaction/end`、`compaction/summary` 原生事件和 `compress` 工具调用(新增 `nativeCompactionsIn` / `compressToolCallsIn` / `compressionKindOf`);`state.compaction.provider` 记录最近一次真实来源,面板「上下文压缩」卡片说明随之变化(配合卸载 billion-context、官方 `dsh-compaction-basic` 接管)。
- **0.14.0**:压缩/摘要记账进面板(`compactionStats` + `/dsh-puppet-memory-api?action=status` 的 `compaction` 字段 + 第七套测试)。
- **0.13.4**:备份「假成功」根因收口——测试真的备完会删快照却没还原运行态,改为测前快照状态、测后 `saveState` 还原并断言,另加 `recordedSnapshot` 与三种中文告警。

## 未做(后续版本)

- 关系使用次数统计与「反向深层记忆恢复行为记忆」
- 自动摘要的「重新生成」按钮(现在只能删除;删完靠下次触发自动重摘)
- 记忆体检卡(规模/孤立条目/过期线索)
- 记忆导出/导入(整包带走,换机不丢)
- 客户端 UI 面板(整体)
- 知识时效(verifiedAt / staleAfterDays,检索标「可能过时」,被质疑时提醒复核)
- v0.21 阶段 1:旧记忆迁移进多人模型、事件自动入库、跨平台归一规则(骨架已就位,等数据够 + 人确认)