@bangbang-03/dsh-memory
Long-term memory scoped to the DSH workspace. A session opens with a one-line-per-memory index - bodies are fetched on demand by the `memory` tool, so the same character budget holds about three times as many entries - and when a turn ends a purely local search over the last user message pulls the m
Install
dsh plugin --profile web add @bangbang-03/dsh-memory
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
Memory Portrait · 记忆画像




DSH 的记忆画像:不是记住更多,而是让你看见它怎么理解你。<br>
Long-term memory for DeepSeek Harness, with a portrait you can inspect.
中文 | [English](#english) | 项目主页
仓库名已改为dsh-memory-portrait;npm 包名仍是@bangbang-03/dsh-memory,安装命令不变。
Memory Portrait 把记忆按工作区落库:会话开始时注入一份索引简报(一行一条,正文按需用 memory 工具取,省 token),
轮次结束后用本地检索把相关记忆召回到下一轮,可选地把对话自动提炼成结构化记忆。
它把「画像」放在首页:模型现在怎么理解你、每段判断来自哪条记忆、这一版和上一版差在哪里——有证据、有版本、能解释变化。
和「自动多记一点」的插件不同,它把重点放在记错了怎么办:红线、审批队列、版本链、注入审计、派生链,全部能在 设置 → 记忆 里看到。
- 画像是主视图:每段挂证据,改了什么可 diff,源失效沿派生链标脏。
- 省 token:索引模式同样预算多装约 3 倍条目;简报字节稳定,不破坏 prompt 前缀缓存。
- 可控:自动提炼可先进审批队列;红线逐字置顶,模型不能删改;改稿留历史,可回滚。
- 可审计:每次注入都记录正文 hash、命中的记忆 id、被预算挤掉的条目;画像与
AGENTS.md有派生链。 - 零依赖:
dependencies为空,只要 fs + 回环 HTTP;不 shell、不 env、不启子进程、不出站、不加载动态代码。
English — Long-term workspace memory for DeepSeek Harness, with an inspectable portrait: every section carries evidence, versions, and diffs. Redlines, an approval queue, a version chain, and an injection audit are included. Zero dependencies; no shell, env, or outbound requests. [Jump to English](#english).
安装
DSH ≥ 0.2.0-rc.2,web / 桌面。headless / TUI profile 尚未做端到端验证,暂不声明。
一条命令(推荐,web profile)
dsh plugin --profile web add "https://github.com/BangBang-03/dsh-memory-portrait/releases/latest/download/dsh-memory-latest.tgz"
/latest/ 永远取最新稳定版,不需要 clone,也不需要 npm。
npm(web profile)
dsh plugin --profile web add @bangbang-03/dsh-memory
npm 源与 Releases 同源;如果 npm view @bangbang-03/dsh-memory version 低于 Releases,用上面的「一条命令」。
桌面端
把 install.ps1 下载到任意目录,然后:
pwsh -File install.ps1 -FromRelease -Channel stable
脚本会下载最新稳定版 tarball、解包到 ~/.dsh/plugins/dsh-memory,再完成垫片 / profile 清单 / junction 三步;更新就是重跑同一条命令。-Channel lab 是兼容别名,等同 stable。
源码
git clone https://github.com/BangBang-03/dsh-memory-portrait.git cd dsh-memory-portrait pwsh -File install.ps1 -DryRun # 先看一遍要改什么 pwsh -File install.ps1 # 真装 # 重启 DSH 桌面端
dsh plugin --profile desktop …会被拒绝:desktop profile 由 Electron 独占。桌面端用上面的install.ps1。
改 profile 前脚本会自动备份(秒级时间戳,不覆盖旧备份)。回滚:pwsh -File uninstall.ps1(记忆数据保留);
-PurgeStorage才会删~/.dsh/storages/dsh-memory。
装好后打开 设置 → 记忆。宿主路由是 /memory/api,只监听回环地址;客户端用 new URL("memory/api/…", document.baseURI) 解析,反代前缀 / dsh-app:// 外壳下也能到达。
兼容性
DSH 版本 · 状态
0.2.0-rc.2 · compatible(已测试)
0.2.1-rc.3 · compatible(已测试)
0.2.1-rc.4 · unknown(范围覆盖,未单独测试)
0.2.1-rc.5 · compatible(当前桌面版,已测试)
0.2.2-alpha.2 · unknown(范围覆盖,未测试)
Node ^22.19.0 || >=24.0.0;DSH 范围 >=0.2.0-rc.2 <0.3.0-0。范围按 0.2 版本线整体声明,避免 DSH 每发一个 nightly 就在宿主启动时被跳过;逐版本测试结论仍记在 dsh.compatibility.dshReleases,未测试的版本标 unknown,不冒充 compatible。
DSH 0.2.1 起,宿主在启动 / 重新组合时按engines.dsh判定组合包:不匹配的 bundle 会被静默跳过(列进skippedBundles),市场卡片显示“已安装,与当前 dsh 不兼容”,插件功能整体不生效。升级 DSH 后若看到这行字,先确认上表的范围覆盖当前版本。
兼容口径不是手写三份:node tools/check-compat.mjs会核对package.json与 README 表格;--npm再核对 npmjs 上已发布的同一版本。CI 在发版时跑后者。
它怎么工作
通路 · 触发 · 做什么
简报 · 会话开始 · briefMode: index 一行一条;正文按需 memory get/search
memory 工具 · 任何时候 · save/search/sessions/promote/list/get/update/forget/stats
轮末召回 · turn/end · 当轮用户消息本地检索,命中项下一轮尾部注入;纯本地 0 token
路径 JIT · 工具触达 files · 相关记忆在下一步尾部注入;全路径 > 目录后缀 > 同名
自动提炼 · 轮次结束(可选) · 结构化记忆;captureMode: draft 先进审批队列
Dream / 画像 · 启动 + 轮末到期检查 · 合并重复簇、报告矛盾、报告过期;画像按 6 小时自动刷新
前台会话卡 · 仅当前对话(可收起) · 右下角悬浮卡:图标 + 「更新于 YYYY-MM-DD HH:MM」+ 一段话摘要(本会话沉淀的记忆标题连成一句,草稿不可见);图标在设置里可选 7 种,默认官方鲸鱼标;可拖拽,位置本地记住;切到设置 / 插件 / 自动化任务页自动隐藏,切对话自动换摘要;设置 → 记忆可用「该对话记忆」单独关闭本对话
简报的排序不读 useCount / 当前时间,日期戳只用 createdAt,并且会话级冻结。这样同一会话的系统提示不会逐轮变化,前缀缓存不会因为记忆更新而整段作废。
从别的工具搬过来
设置 → 记忆 → 从本机既有记忆导入:扫描 WorkBuddy / Qoder / Claude Code / Codex / Windsurf 的既有记忆文件,只读扫描、按来源打标签;也可以直接粘 /export 的 JSON 或 Markdown。导入有新增时会后台触发一次画像重写(feedPortrait: false 可关)。
画像与账本
画像不是一句总结:每段有证据、版本和 diff;下面的机制保证它不会变成模型随手写的小抄。
机制 · 作用
红线 · 绝对禁令逐字置顶;模型不能删 / 归档;改稿留 20 版历史,可回滚;保存前查冲突
审批队列 · captureMode: draft 时草稿四不可见(简报 / 检索 / 镜像 / 导出),批准才生效
版本链 · supersedes 旧条归档不删除,新旧互指;一键回滚
注入审计 · 每次进 prompt 的正文 hash + 记忆 id + 被挤掉的条目;append-only
派生链 · 记忆 → 画像 → AGENTS.md 每层记源快照;源失效沿链标脏
整库快照 · 每天首次写入 + 每次 Dream 前备份,轮转 7 份;恢复 = 手工拷回库目录
写入安全 · 密钥脱敏 + 注入模式 taint;非 user 来源 taint 隔离成草稿
为什么是「画像」
如果你要的是「模型自动多记一点」,很多插件都能做。Memory Portrait 把重点放在它现在怎么理解你:画像的每段有证据、有版本、能解释变化;写错了有红线、审批、版本链、注入审计。它不追求记住一切,而是让每一条被记住的东西有来源、有版本、能解释、能撤回。
几个明确的取舍:
选择 · 取舍
本地 BM25F + 精确短语 + 同义词 + 路径召回 · 不引入向量服务 / 后端,零依赖;语义泛化弱于 embedding
索引简报 + 按需取正文 · 省 token;模型需要多一步 get
启动 / 轮末到期检查,无常驻定时器 · 不占后台;整理不是实时
Dream 只报告矛盾,不自动归档 · 避免词法误报;需要人确认
配置
面板里能改的都落在 ~/.dsh/storages/dsh-memory/settings.json;cordis.patch.yml 里的 config 只是初值。
键 · 默认 · 说明
enabled · true · 总开关
autoInject · true · 注入总闸:关掉后简报 / 轮末召回 / 路径召回都不再进上下文,memory 工具照常读写(「只用工具」档)
directory · "" · 数据库位置,空 = ~/.dsh/storages/dsh-memory
`disabledWorkspa
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::7,最后更新 2026-11-01