Skip to content

Releases: xingyueDanYang/dsh-puppet-memory

v0.35.0 标废 + 写入侧别名 + 导出档案

Choose a tag to compare

@xingyueDanYang xingyueDanYang released this 26 Oct 04:11

木偶记忆 0.35.0(2026-10-26)

一句话:记忆能「退役」不删了,同一件事换个说法也能搜到,数据还能整份导出带走。

你会感觉到什么变化

  • 标废过的条目从注入和默认检索里消失(数据还在,带 includeVoided 或 memory_locate 能查回来)
  • 检索的新鲜度权重下调了:新写的条目不再压过真正相关的老条目
  • 同义问法更容易搜到:靠写入时存的别名(换说法、不共用实词的那类问题)
  • 其余行为不变;升级不需要迁移,config.json 缺新字段会自动补默认值

新增

1. 标废(B-55)

memory_void / unvoid,reason 必填。标废后不进注入、默认不进检索,但原文与作废原因都留着,memory_locate 查得到、随时 unvoid 恢复。绝不物理删除——淘汰不是删除,是「降级且留账」。

2. 写入侧别名(B-60)

memory_write 加 aliases(最多 8 个、每个 ≤16 字)。把「同一件事的其他叫法」一起存进去,之后搜哪个说法都能命中;更新条目时别名取并集。
由来:评测里纯同义改写的问法,纯词法检索 recall@5 只有 0–25%,光调权重救不了,只能从写入端补。

3. 导出档案(B-66)

memory_export 往 ~/.dsh/memory/exports/export-<时间>/ 写两份:

  • 档案.md:人读——三张卡、各层条目(带 hash/日期/标签/标废原因)、最近日记、手册正文、会话索引
  • data.json:机器读——formatVersion: 1,字段只增不改名

只读,不写任何记忆文件。用途:换机器、交给人接手、给下一代模型重算。

4. 日记全文可选(A-75)

config.diary.fullText=true 后,回合日记除 240 字摘要外再存 userFull / assistantFull。加字段不替换——注入与检索仍只读短字段,开全文不会让上下文变长。默认关(隐私面会放大)。

5. 值班台「省 token」卡(B-53 / B-54)

观察间隔 / 回话间隔(各 1–30 分钟)、峰时减半、脚本级跳过规则,落 ~/.dsh/qq-watch/settings.json,观察器每轮热读。
注意:这些改的是本机 QQ 观察器(单独的本机脚本,不在本插件包内);没跑观察器的人这张卡只会写一份用不上的配置。

6. engines.dsh

声明 >=0.2.1-rc.2,市场卡片不再显示「宿主要求未知」。

修复

  • 会话索引的 sessionFile 一列全是空串(A-70):写入时把 session- 前缀拼了两遍,去找 session-session-<uuid>,永远找不到;memory_recall 靠兜底才没坏
  • 新装用户的默认人设模板写着我们的称呼(A-71):ensure() 在 persona.md 缺失时会把模板写进用户的记忆目录,等于让所有人的 AI 都管主人叫「大肥鱼」;改成中性占位,已有用户的 persona 不会被覆盖
  • 包内文档的本机路径(A-72):9 处写死 C:\Users\<真名> 一类路径,改成占位符
  • 「脱敏检查」两条正则从来没生效过(A-72 / A-77):反斜杠写成了 \\,实际文档里是单个 \,所以「本机绝对路径」「家目录路径」一次都没命中过;另外 git ls-files 默认把中文文件名转成八进制转义,于是 给人类的说明书.md/全功能说明.md/验收-*.md 这些文件从来没被扫过——这次差点把真实群号发进包里
  • README 第一句停在旧版本(A-73):发版后一直写着 0.32.0,而「文档版本号」检查抓不到它(更新日志里有新版本号就算过)

工程

  • preflight 从 19 项加到 21 项:新增「包内容隐私扫描」(直接跑 脱敏检查.mjs,命中就红)、「README 首行版本」(正则取首句版本号与 package.json 比对)
  • 测试从 26 套加到 31 套(新增 void / aliases / session-file / fresh-persona / export / diary-full / qq-watch-settings)
  • 老数据兼容:用 10-21 的旧快照跑 test/upgrade-compat.mjs 7 项全过;检索评测与 0.34 持平(A 组 0%/5%、B 组 65%/90%)

回滚

三条路都不丢数据:

  1. 改配置回退:writeGuard.enabled=false、diary.fullText=false、brief.enabled=false
  2. git revert 对应提交(每个修补一条 commit)
  3. 还原备份快照:~/.dsh/memory-backups/snapshot-*(逐项对拷,别整目录覆盖)

装法

市场卡片里点安装,或:

dsh plugin --profile <你的 profile> add https://github.com/xingyueDanYang/dsh-puppet-memory/releases/latest/download/dsh-puppet-memory.tgz

装完重启宿主,memory_stats 能看到版本号变成 0.35.0。

v0.34.0 写入守卫 + 要点层

Choose a tag to compare

@xingyueDanYang xingyueDanYang released this 25 Oct 10:25

这一版做了什么

0.34.0 只做两件事,都是取样市场后发现的真实缺口(对比了 mnemon / OpenViKing / prime-memory / auto-memory / meow-memory 等同类):

1. 写入守卫:别让脏东西进来

以前 memory_write 对任何内容照收不误。现在:

  • 乱码拦截:替换字符 �、锟斤拷 / 烫烫烫 / 屯屯屯、â / †/ ï¼ 这类被当 Latin-1 解过的 UTF-8 序列,直接拒收。
  • 按层字数上限:relation / saying 1200、user 800、memo 4000、note 8000、persona 1200、diary 4000。超长粘贴会被要求拆条或只留要点。
  • 注入块拦截:把 <puppet_memory>、【核心记忆】、【行为规则】 这类系统注入的格式整段复制进记忆,会被判为无效内容拒收。
  • 拒收只返回可读原因(不抛异常、不写库),模型可以当场改文案再来。
  • 近似重复合并:便签与笔记如果和最近 300 条某条高度相似(字符二元组 Jaccard ≥ 0.82,或长度接近且包含度 ≥ 0.9),合并进旧条目而不是新加一条;标签取并集,只有新文本多两成以上才替换正文。
  • 人设整行去重:同一行写两遍不会再真的出现两遍。

配置:writeGuard.enabled / dedupe / dedupeThreshold / maxChars.<层>,默认全开。

2. 要点层:先给一句能扫的话

memory_search 结果顶部现在先给最多 3 条「要点 + hash」:

【要点】
1. 已经进入市场了,也公开了  #08c485317c8dd065
2. 丹阳 2026-10-25:「已经进入市场了,也公开了…  #0b8be6ddd8e2d4a8

要点是抽取式的:取第一句、去掉标记与层前缀、压到 60 字以内。不调模型、不花 token、不额外存字段,老条目不用迁移;想看细节再用 memory_locate 取原文。

配置:brief.enabled / prependHits / maxChars——关掉(或 prependHits: 0)立即退回旧格式。

升级与兼容

  • 老数据一个字不用动,没有格式变更、没有迁移步骤。
  • config.json 里缺 writeGuard / brief 两段会自动补默认值;想回旧行为,把 writeGuard.enabled 或 brief.enabled 设成 false 即可,不用降版本。
  • 升级方式不变:市场点更新 / 下载 tgz / 压缩包覆盖 node_modules/dsh-puppet-memory,重启 DSH。

测试

  • 24 套测试全过(新增 test/write-guard.mjs 23 项、test/brief.mjs 17 项)。
  • 预检 19 项里 16 项通过,另外 3 项是 QQ 通道相关(QQ 侧按计划暂停到 12 月底,与本版无关)。
  • 真实记忆上跑过检索,要点块输出正常。

已知边界

  • 只做「近重复合并」,不做「把一万条抽象成几条」的语义归并——那需要向量或模型调用,和「零依赖、纯文本」的定位冲突。
  • 要点是抽取式的,遇到「第一句没有信息量」的条目会给出一句不够好的摘要;需要更好就用 memory_locate 看原文,或后面单独开模型提炼的版本。

资产已重新打包(2026-10-25 19:2x):仓库与发布包里的个人号码(QQ 号 / 群号 / OneBot token)已做脱敏替换,历史提交同步重写。功能与上面描述完全一致。

0.33.1 · 文档合并与清理

Choose a tag to compare

@xingyueDanYang xingyueDanYang released this 25 Oct 03:28

0.33.1 · 文档合并与清理(功能与 0.33.0 相同)

这一版只动文档,代码与 0.33.0 一致:

  • 两份人话文档合并成一份:老《怎么用-给大肥鱼》里说明书缺的内容并进《给人类的说明书》后删除——补了「三线状态」一行、FAQ「觉得它太吵」、新增「数据在哪 / 单个功能怎么关」一节(配置开关表 + 数据位置表),原「边界」「命令行」顺延为八、九。
  • 删掉 便签.txt:那是 0.28.0 时代的三步装法,内容已全部被说明书覆盖。
  • 《全功能说明》更新到本版:补记忆三态、核心卡拆三份、memory_core action=reset、备份含 social/ 与「恢复别整目录盖」的口径。
  • 预检新增一项「文档版本号与 package.json 一致」——以后发版漏更新文档会直接变红,不靠记性。

0.33.0 · 记忆更准(三态 + 一句话复位)

Choose a tag to compare

@xingyueDanYang xingyueDanYang released this 25 Oct 03:07

0.33.0 · 记忆更准(三态 + 一句话复位)

这一版不堆功能,全在「怎么让记忆少骗人、少占用」:

记忆三态:memory_write 加 state(done 做过 / failed 没做成 / heard 听说)与 proof(回执 / 失败原因 / 谁说的)。
注入和检索(memory_search 命中行)都带〔做过〕〔没做成〕〔听说〕前缀——扫一眼就知道哪条是验证过的。

核心卡拆三份:

  • behavior/core.md:稳定内容(称呼约定 / 用户 / 能力),600 字
  • behavior/core-rules.md:说话方式 / 红线 / 约定,400 字,只在规则改过或上下文压缩后补一次
  • behavior/core-state.md:当前主线 / 待办,150 字

三份各算注入指纹:状态改来改去不会把规则反复念,也不会把稳定内容顶出预算。

一句话复位:memory_core action=reset 清掉本会话注入指纹,下一步把三张卡重注一次;可带一句一次性临时约束(只对本次会话生效、注入一次即弃、不写任何文件)。

两处修正:

  • memory_stats 分卡报字数(以前拿三卡合计去比 600 预算,会误报「超预算」)
  • 备份补上 social/(群 / 人档案);恢复说明改成逐项对拷(原先「整目录覆盖」会丢 config.json)

验证:21 套测试全过;预检 17 项全绿。安装:dsh plugin add dsh-puppet-memory,或直接下 dsh-puppet-memory.tgz。

0.32.0 · 值班台(兼容 DSH 0.2.1-rc.3)

Choose a tag to compare

@xingyueDanYang xingyueDanYang released this 24 Oct 07:16

值班台来了:点侧栏「值班台」,一屏看完三样心跳。

新功能

  • 值班台:QQ 观察器(今日额度 / 观察器 pid / 最近扫描 / 开机自启 / 未清告警)、B站值班(配置 / 最近报告及多久前 / 日志尾)、记忆(版本 / 核心卡字数 / 关系·用户·便签·笔记条数 / 累计压缩 / 压缩后自检);每 30 秒自动刷新,只读本地文件、不花模型钱。
  • 面板走宿主新契约:sidebar.panellist 面板行 + main keyed 面板 + 「更多」菜单里两行宿主菜单(打开 / 收进「更多」/ 固定回侧栏)。

修复

  • 值班台白屏 + 侧栏加不进去:面板误注册进 sidebar.panellist.actions(那只是「更多」里的自定义行,不是面板本身),另外菜单里自己画的按钮在宿主菜单里就是一块白块。
  • 压缩记录整条链断掉:index.js 里 const compactionPending = new Map() 被上一处补丁粘进了注释行,每次压缩事件都 ReferenceError。
  • 值班台日志尾部是 UTC,15:01 的扫描显示成「07:01Z」像 8 小时前,现在统一换成本地 MM-DD HH:mm。
  • (不在本插件)dsh-bili-scroll 的 DEFAULTS.pythonPath 单反斜杠导致 MCP initialize 一直超时。

兼容

  • 已按 DSH 0.2.1-rc.3 的新侧栏面板契约实现并实测(侧栏出现面板行、点开三张卡片、能收进/固定回侧栏)。

安装

下载下面的 zip → 解压到 ~/.dsh/profiles/<profile>/node_modules/dsh-puppet-memory(或在 DSH 的插件页安装本包)→ 重启宿主生效。

木偶记忆 0.29.1

Choose a tag to compare

@xingyueDanYang xingyueDanYang released this 23 Oct 00:15

更新插件定位(三层记忆 + 核心卡 + 三线状态 + 多人多群 + 会话记忆管理),补 MIT LICENSE。

木偶记忆 0.29.0

Choose a tag to compare

@xingyueDanYang xingyueDanYang released this 23 Oct 00:04

木偶记忆 v0.29.0 · Release Notes

DSH(DeepSeek Harness)插件 · MIT · 零依赖(只用 Node 标准库)· 17 个测试套件

给 AI 装一个记忆箱:记得住人、记得住事,而且脏记忆不会污染上下文。

这个版本有什么

记忆本体

  • 三层记忆:行为层(人设/关系/笔记/日记,按预算注入)、深层(常言/引导/树状日记)、阵列(会话索引,可按需回读原始会话)。
  • 核心记忆 core.md:600 字预算的小文件,每次注入、优先级最高;内容不变不重复,上下文被压缩后自动补回;字数从总注入预算里扣,不撑爆上下文。
  • 自动摘要:压缩后/会话结束时,把长回合压成摘要,只在检索时出现;可用独立小模型(autoSummary.model),失败自动回退主会话模型。
  • 事实候选:从摘要里提炼「稳定事实」只提案,memory_facts action=accept 人才点确认——绝不自动改记忆。
  • 可移植性:默认备份到家目录(不再绑死 F 盘),目录不可写自动回退;memory_doctor 一键自检。

多人 / 多群

  • social/:人、群、关系边、分区事实(主人私事 / 某人某群 / 群档案 / 显式公共);按场景注入,跨群默认不串;身份合并不自动,必须人确认。

状态与表达

  • 三线状态(工作/陪伴/学习):词表检测 + 半衰期衰减 + 话题锚点 + 冷却;只给定性取向,不把数字给模型。
  • 会话记忆管理:脏片段可以只在本会话屏蔽(数据不删),或删掉本会话片段(先归档),或整会话暂停注入。防「一条坏记忆跟着每个回合走」。

关系观

  • 不做好感度/分数(v0.29 移除了早期数值化设计):关系只记具体发生过什么,不设可刷的指标。

安装

# npm 上架后(推荐)
dsh plugin --profile <profile> add dsh-puppet-memory

# 或者本地目录
dsh plugin --profile <profile> add file:<插件目录绝对路径>

重启 DSH,然后对 AI 说 memory_doctor 自检。设置里会多三页:记忆备份 / 自动摘要 / 会话记忆。

升级说明

  • 0.20 → 0.29 全部向后兼容:旧数据不用迁移;新增的是 social/、state/ 目录。
  • 早期版本里的 affinity 字段已废弃:读到也忽略,不删不迁移。
  • 备份默认目录变了(家目录),旧配置里写的路径仍然有效,只是不可写时会自动回退。

测试

17 套,全部通过。跑法:

ELECTRON_RUN_AS_NODE=1 "<DeepSeek Harness.exe>" --expose-internals test/smoke.mjs

许可

MIT。第三方思路参考在 README 里标注(伴行 weights.js 的三线状态、qq-bridge 的桥接思路),代码均为自写。