🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话记忆归档 vv5v5/dsh-memory-archive

DeepSeek 客户端
vv5v534 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

找回被压缩折叠的对话,查看每轮真实提示词

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/vv5v5/dsh-memory-archive.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意
要求 Node:>=22.13(dsh 本身要求 Node ≥ 22.19)

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-memory-archive(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.13 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/7 19:26:37

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 找回折叠的对话内容
  • 查看每轮实际提示词

会话记忆归档 + 提示词查看器,专为 DeepSeek Harness 打造:读回压缩时折叠掉的内容,查看每轮实际发出的提示词。

README

由 DeepSeek 最新模型翻译生成
dsh-memory-archive · 记忆库 不发明记忆,只把 DSH 已经压掉的东西重新变得「取得到」。 DSH 的上下文压缩(compaction-basic)本来就在把旧内容折叠出模型可见面。 本插件不重写压缩、不重写摘要、不建第二份存储、不改 DSH 本体一行,只补三件事: 1. 取用 —— 被折叠的内容一直都在会话日志里,缺的是一个够得着的入口(面板 / 检索 / 每轮注入); 2. 如实标注 —— 每条内容标明它此刻是 current(还在模型可见面)/ shadowed(已被压出上下文)/ log-only(本来就不上面); 3. RP 的那一小套 —— 剧情笔记写入、最近几楼、第一轮保留、角色卡后处理指令、RP 专用压缩后端与压缩后收纳。 配套的两个独立插件(都是可选的,本仓库不含它们的代码): pmp-dsh-tavern(角色卡 / 世界书 / 周目 / ST 预设)与 dsh-anima-rag(向量检索、语义回响、向量面板那半边)。★ 2026-09-26 起 BM25 支线已退役(摘除);<memoryEcho> 那一格由 anima 的语义命中装。
展开完整文档(README 剩余 1 节)
dsh-memory-archive · 记忆库

不发明记忆,只把 DSH 已经压掉的东西重新变得「取得到」。

DSH 的上下文压缩(compaction-basic)本来就在把旧内容折叠出模型可见面。
本插件不重写压缩、不重写摘要、不建第二份存储、不改 DSH 本体一行,只补三件事:

1. 取用 —— 被折叠的内容一直都在会话日志里,缺的是一个够得着的入口(面板 / 检索 / 每轮注入);
2. 如实标注 —— 每条内容标明它此刻是 current(还在模型可见面)/ shadowed(已被压出上下文)/ log-only(本来就不上面);
3. RP 的那一小套 —— 剧情笔记写入、最近几楼、第一轮保留、角色卡后处理指令、RP 专用压缩后端与压缩后收纳。

配套的两个独立插件(都是可选的,本仓库不含它们的代码): pmp-dsh-tavern(角色卡 / 世界书 / 周目 / ST 预设)与 dsh-anima-rag(向量检索、语义回响、向量面板那半边)。★ 2026-09-26 起 BM25 支线已退役(摘除);<memoryEcho> 那一格由 anima 的语义命中装。

它现在能干什么(如实标注)

| 能力 | 状态 |
| 记忆库面板:摘要 / 原文 / RP 记忆 / 向量 / 压缩 五档 + 设置 | ✅ |
| 提示词查看器:每次模型请求真正发出的全文(system 段地图、段级偏移、点开看该段正文、消息流) | ✅ |
| 剧情笔记写入:memory_write 工具,写进本会话周目的 .roleplay-memory/(⛔ 只写周目目录) | ✅ |
| 预部署资料:把要预置的文件放进工作区根 .roleplay-memory/ ⇒ 新周目开局就读得到(只读、所有周目共享;见下) | ✅ |
| 每轮注入:mt:memoryProtocol · mt:memoryHome · rp:firstRound · mt:lastFloors | ✅ |
| 角色卡后处理指令(PHI):从 system 段挪成「玩家消息之后」的一条 user 消息(默认开) | ✅ |
| RP 压缩后端:中文归档指令(mt-compaction-rp.js,由本仓库生成、挂进预设目录);★ 2026-09-22 起是三档回退梯子(R1 现状形状 → R2 每条消息都带 source → R3 官方形状),谁赢的落一行到 compaction-failures.log | ✅ |
| 压缩后自动收纳 + 孤儿清理(摘要进库、账本防重、被删切片的对账与隔离);★ 2026-09-22 起入口判据 = 会话优先(这条会话自己解析出的周目 == 面板绑定的目标周目 ⇒ 才收;一路「从这里继续」续接出来的会话照收,认不出周目 / 属于另一个周目的仍拒) | ✅ |
| OOC 两席:输入栏的「OOC」前缀按钮 + 划词「质疑」 | ✅ |
| 一个 skill:rp-assistant(带三份可查资料,见下) | ✅ |
| 自带的 RP 预设:preset/(组装 + 模块 + 压缩后端),node preset/install.mjs --apply 铺到预设目录 | ✅ 可选,随包发布;模块从本仓现场取 ⇒ 预设与插件不各自漂移 |
| 两种根:会话模式(零依赖)/ 工作区模式(需 pmp-dsh-tavern) | ✅ |
| 预设生成 / 写入面(detect · apply · rollback · provision · backups · pack) | ⛔ 已退役(2026-09-19 用户口径:「不用保持了」)—— 预设目录现在自己维护,本插件不再替你改 |
| 状态子系统(state-bridge 子包 + state:card 段 + 5 个状态工具) | ⛔ 已剥离(2026-09-20)—— 状态改由周目笔记 state.md 承载,模型按文件开头写的要求自己维护 |

安装

从 GitHub
dsh plugin --profile <你的 profile 名> add github:vv5v5/dsh-memory-archive

或本地目录(开发用)
dsh plugin --profile <你的 profile 名> add ./dsh-memory-archive

装完重启一次宿主:浏览器半侧的 bundle 是宿主启动时组装的。

附带的 RP 预设(可选)

本包自带一份「角色扮演」预设(preset/:组装文件 + 几个模块 + RP 专用压缩后端)。
它的描述里写明「由 dsh-memory-archive 提供」 —— 预设列表里同名的那份是社区预设,认描述就能分开。
它不会自动生效(DSH 的预设是文件系统型的),要铺一次:

node <profile>/node_modules/dsh-memory-archive/preset/install.mjs # dry-run:先看会写什么
node <profile>/node_modules/dsh-memory-archive/preset/install.mjs --apply # 真写(默认 roleplay 目录)

细节、依赖与限制见 preset/README.md。

本包没有构建步骤 —— lib/ 里就是可直接运行的 JS(react 由 DSH 平台的模块 seed 表提供)。

依赖

| 功能 | 依赖 |
| 记忆库(会话模式)/ 提示词查看器 / 工具与注入 | 零依赖 —— 原版 DSH 纯净环境即可用 |
| 工作区模式、剧情笔记目录、RP 记忆档、向量页签的体检行 | 需要 pmp-dsh-tavern(可选,未装时相关入口置灰并说明原因) |
| 检索注入(anima:memory)、<memoryEcho> 回响、向量页签的动作 | 需要 dsh-anima-rag(可选) |

两者在 package.json 里都是 optional peer,不会被强制安装。

两种根模式

记忆库要能在两种环境里用,而它们的「根」根本不是同一种东西 —— 所以根是一个可切换的模式:

| | 会话模式(默认) | 工作区模式 |
| 根 | 一条手动选定的 DSH 会话 | Tavern 工作区里某个周目的 archive/ |
| 数据来源 | DSH 自己的会话事件日志(精确读,不触发索引重建) | 归档文件(floors/ summaries/ .roleplay-memory/) |
| 能看到 | 该会话的全部事件,含已被压缩出上下文的那些 | 归档契约覆盖的那些:原文 / 摘要 / 剧情笔记 |
| 依赖 | 无 | pmp-dsh-tavern |

「手动选择」是刻意的 —— 「哪条会话算记忆」是用户的语义判断,不做自动推断。

面板

侧边栏底部两个入口:记忆库(齿轮)与 Agent 编辑器(只读检视组装)。输入栏里还有两席(OOC)。

记忆库 → 五档 + 设置

- 摘要 —— 按楼序拼接成长文,从头读到尾;
- 原文 —— 按需懒加载:每条的 surface 如实标记(current / shadowed / log-only),未发给模型的楼层如实标注;
- RP 记忆 —— 本会话周目 .roleplay-memory/ 里的笔记(index.md / state.md / characters.md / world.md …),内容需手动确认才展开;展开后两处落点各一行(本会话周目目录 / 跨周目共用那份),各自标「在 · N 份」或「还没有」,并各带一个按钮:打开文件夹 / 创建并打开(周目目录还没建 ⇒ 先建再开)/ 打开工作区根(共用那份还没建 ⇒ 打开工作区根让你自己放,⛔ 我们不替社区预设建目录)。
另有一张楼层清单:楼层号是插件自编的序号(按各条的记录时间升序编号,最大=最新;⛔ 面板不再显示 Tavern 的楼号)。
清单默认只列最近 10 条(序号从大到小);当前剧情那一行与档案指针那一行永远可见(排在 10 条之外也照画,回档完要找得到),中间省略的用一行「…(省略 N 条)」表示,另有一颗「显示其余 N 条」(点开全量、再点收起)。
每一行有「看改动 ▸」:点开就地展开它与时间上紧随其前那一条的逐份真 diff(增/删行带上下文;死区那几份如实标「按块合并」)—— ⛔ 不是"改了哪几份"那句话;要看就看真正变了的内容。
- 向量 —— 本库(dsh-memory)的体检行 + 一行库(向量,带 ⚠缺失 / 重建 / 删除)+ 「最近检索」行(读侧最近一次到底跑成没有)+ 「BM25 已退役」那一行(★ 2026-09-26 摘除,如实告知)+ 一个「参与检索」开关;动作走一张请求单,由 dsh-anima-rag 在该周目会话的下一轮开始前执行,回执写回来(lib/vector-panel.js);
- 压缩 —— 自动压缩触发阈值控制面板(2026-09-21;会话模式也与「会话事件」并列,因为它读的是本会话的实时数,不依赖 Tavern 归档)。三块:实时读数(每 4 秒现读宿主,面板关掉就停)——主行「当前 42%」= DSH 自带的那个上下文百分比(contextPressure 投影,prompt 侧压力,不含输出 token);副行「触发判定 47%(含输出 token)」= 真正被拿去比阈值的那个数(tokenMeter.measure(session).totalTokens);第三行「窗口 128k · 预设阈值 15% · 阈值 19200 token」。两个数不是同一个分子,所以并排显示; 控件(滑块 5–90 步 5 + 数字框互相同步 + 「用面板的阈值」开关 + 保存); 如实说明三条(逐字:改完之后立刻生效。 / 触发阈值是估算的,因为输出token也参与计算,因此触发会略早于设置值。 / 另外如果上下文超限,会无视阈值强制压缩。)。
读不到 ⇒ 红字「读不到(原因)」,⛔ 不用 0% 冒充。阈值保存走 POST /compaction/config:同时写 config.json 与部署的预设 YAML 的 thresholdRatio(先数出现次数、≠1 就拒绝改、改前备份 .bak-<时间戳>、写后回读校验),两件事各自如实回报;
- 设置 —— 根模式与根选择、向量检索 API(向量模型与重排模型各一套「接口地址 / 模型名 / 密钥」,两个密钥都只写不读、可各自清空)、提示词模板(压缩指令 / 收纳占位)、各项开关。

会话、周目、角色都显示真名而不是 id;三级回退(title → 周目反查 → 8 位截断 id)各级如实标注来源, 任何情况下都不显示完整 UUID。

Agent 编辑器(只读)

当前会话所用 preset 的段 / 插件 / order 清单(每项一句「谁注入 · order · 作用」)、段级偏移、 「面板值 vs preset 实际值是否一致」(不一致就明说「面板改了也不会生效」)。v5 起零写入,连备份目录都不建。

每轮往提示词里注了什么(RP)

★ 口径:会话优先,认不出来的会话当新会话(2026-09-20)。「哪个周目」按这个会话在 Tavern catalog.json/timeline.json 里归入的那个算;认不出(新开的会话还没被 Tavern 认领 / 不是 Tavern 的会话) ⇒ 没有周目:下面凡是要"某个周目"的,一律不注入,memory_write 也直接报错。
会话若同时被两个周目引用 ⇒ 判给它是 rootSessionId 的那个(顺序无关);两个都不是根才按 catalog 顺序。
面板里那个「工作区根」只是查看用的视图(手动选根看别的周目照旧),⛔ 不决定注入写哪儿。
顶栏会并排显示两件事:当前根:…(视图)+ 本会话:…(生效;未归入时是红字)。

★ 预部署(新周目开局就带上下文):把要预置的文件(角色设定 / 世界书 / 写作规矩一类)放进 工作区根下的 <工作区根>/.roleplay-memory/ —— <memoryHome> 段会把它列出来(只读),模型开局就读得到;⛔ 它不是写的地方(各周目的笔记仍只写自己周目目录,免得串味)。
为什么只能提前放到这儿:周目目录名里带新建时才知道的 UUID(playthrough-<uuid>)。

| 段名 | 作用 | 开关(插件 config.json) |
| mt:memoryProtocol | 告诉模型什么时候该主动去检索历史 | 常开 |
| mt:memoryHome | 告诉模型剧情笔记写在哪个目录 | 常开 |
| rp:firstRound | 把第一轮原文钉住(每轮在场、永不进可压区间) | keepFirstRound.enabled |
| mt:lastFloors | 本会话上下文还短时,把本档案最近几楼的原文当历史喂进去 | lastFloors.enabled · count · maxChars |
| anima:memory | 检索到的历史(<recalledMemories> + <immediateHistory>)—— 由 dsh-anima-rag 填 | 见那个插件 |
| (PHI) | 角色卡的后处理指令:从 system 段挪成玩家消息之后的 user 消息 | phiAsMessage.enabled,默认开 |

★ PHI 是唯一一处故意写进会话历史的注入(其余全走「不写历史」的缝):因为 DSH 的 system 段无法实现文末注入,只能拿 user 消息模拟。代价是它在每轮之间会积累 ⇒ 提示词查看器里标红显示、不计楼层,记忆库不收录它。

配置存在哪

<DSH_HOME 或 ~/.dsh>/dsh-memory-archive/config.json

权限 0600(里面有 API 密钥)、原子写(临时文件 + rename)、读坏不崩(回落默认值并如实报错)。
密钥只在本机:不进 git、不进日志、不经任何响应体回显(宿主只回 keySet 与末 4 位提示)。

主要键:rootMode · root · retrieval{url,model,key,rerankUrl,rerankModel,rerankKey,chatEnabled} · prompts{compaction,placeholder,compactionJailbreak}
· keepFirstRound · lastFloors · memoryWrite · phiAsMessage · autoCollect · summarize · v3。
(★ 2026-09-26:echo 段已退役 —— 旧配置里的它会被如实忽略,GET /config 会回一个 echo.retired 说明。)

宿主接口

全部为同源 HTTP,两条前缀路由在宿主启动时同步注册(ctx.effect 管生命周期,热重载不留野路由):

| 前缀 | 内容 |
| /dsh-memory-archive/api | 配置读写、会话精确读、/templates(提示词模板)、/sessions、/session/events、/collect/(收纳)、/playthrough/(周目目录与打开文件夹)、/vector/state + /vector/action(向量页签)、/retrieval/test(向量与重排各发一次最小请求)、/agent + /agent/card(s)(装配只读检视与角色卡阅读)、/sections*(段表与正文) |
| /dsh-memory-archive/prompt | 提示词查看器的数据面:/health、/api/sessions、/api/session、/api/part |

拿不到的服务一律降级并说明(ok:false + 可读 code),⛔ 不抛、⛔ 不 500、面板不白屏。

设计要点

完整思路见 docs/DESIGN.zh.md。四条:

1. 能用原生机制就用原生机制 —— 「隐藏旧楼层」= surface replace 遮蔽,而 append-only 事件日志是真相源 ⇒ 任何遮蔽都可逆;
2. 不建第二份存储 —— 压缩只是把内容移出模型可见面,没从日志或索引里删掉。缺的从来不是存储,是取用;
3. 注入只走「不写历史」的缝 —— 只用 systemPrompt.section() 与 system-prompt/assemble 瀑布;⛔ 不用 systemPrompt.context()(它是 durable user-role 快照,长对话里等于每轮追加一条);
4. 一件事只有一个写者 —— 向量库归 dsh-anima-rag(面板只读状态 + 写请求单);预设目录归用户(本插件已退役写入面);剧情笔记归模型(走 memory_write)。

已知限制(如实)

| # | 限制 | 说明 |
| 1 | surface 可能为 null | 平台版本不同或读取路径降级时如实填 null,绝不猜测 |
| 2 | 工作区模式依赖 pmp-dsh-tavern | 未安装时相关入口置灰并说明,不会崩溃 |
| 3 | 本插件不生成摘要 | 摘要由压缩产出(RP 压缩后端写 compaction/summary),本插件只把它收进库 |
| 4 | 「压缩指令」保存的是文本 | 它由预设目录里的压缩后端读取(mt-compaction-rp.js,用 _materialize-preset-modules.mjs 铺盘) |
| 5 | 状态不再有独立子系统 | 由周目笔记 state.md 承载,模型自己维护;⛔ 没有优先级更高的"状态工具" |
| 6 | 向量库的写入动作要等一轮 | 面板点动作 = 写一张请求单,由 dsh-anima-rag 在下一次装配执行(面板会显示进度与回执) |
| 7 | 未归入周目的会话什么都拿不到 | 口径如此(⛔ 不继承上一轮的绑定):笔记路径、最近几楼、语义检索与回响、最近总结全停,memory_write 报可读错。先在 Tavern 里给它开/选一个周目(经 Tavern「与 X 新开周目」开的会话从一开始就有周目)。顶栏与「向量」档都会如实标出来 |

开发

npm run check # node --check lib/index.js && node --check lib/client.js

- lib/index.js —— 宿主半侧:配置存储 + 同源 HTTP API + 每轮注入 + 自动收纳 + skill 注册;
- lib/client.js —— 浏览器半侧:工厂形式 CJS,只 require('react'),无 JSX、无需构建;
- lib/prompt-viewer.js —— 提示词查看器宿主半侧;
- lib/vector-panel.js —— 向量页签宿主半侧(读状态快照 / 写请求单);
- preset-modules/ —— 挂进预设目录的那几个模块的源(含由生成器产出的压缩后端);
- skill/rp-assistant/ —— 那一个 skill 的正文与资料。

改完记得:_sync-plugin-deploy.mjs --apply(同步到部署副本)→ 换进程重启 → 自检台全量跑一遍。

许可与署名

- 许可证:Attribution-NonCommercial 4.0 International(CC BY-NC 4.0),SPDX 标识符 CC-BY-NC-4.0;完整法律文本与 NOTICE 见 LICENSE。
- Copyright (c) 2026 dsh-memory-archive contributors

移植来源与署名(按上游要求保留)

| 项目 | 内容 |
| 原项目 | anima-rag |
| 原作者 | Ellinav |
| 原项目地址 | <https://github.com/Ellinav/anima-rag> |
| 原项目许可 | Attribution-NonCommercial 4.0 International(CC BY-NC 4.0) |
| 移植许可 | 经原作者 Ellinav 许可后移植 |

场景限制(移植许可的条件)

- 仅限个人学习与非商业性用途;
- 禁止闭源商用,禁止转为付费插件/服务;
- 不重新分发任何预置私域数据。

第三方许可与出处

- 派生自:DeepSeek Harness 官方 compaction-basic(压缩指令模板取自其 summarize 钩子)—— MIT,Copyright (c) 2026 DeepSeek;本作品中该部分保留原始 MIT 声明。
- 移植/派生自:anima-rag(作者 Ellinav)—— CC BY-NC 4.0;本作品随之整体以 CC BY-NC 4.0 授权。
- 互操作/致谢(⛔ 是互操作,不是派生):pmp-dsh-tavern、dsh-anima-rag —— 均为 MIT;本作品不包含它们的任何代码,只与其配合工作。
预览分享卡片长什么样 ↓vv5v5/dsh-memory-archive
分享 · DeepSeek Harness Hub
vv5v5/dsh-memory-archive

找回被压缩折叠的对话,查看每轮真实提示词

这是你的仓库?认领条目

回到顶部