dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
按工作区隔离的记忆库,支持按对话手动开启、可编辑规则、三种共用模式和连续遗忘;记忆卡仍是可读的 Markdown。
在你手动开启记忆的对话里,把聊天沉淀成本地记忆库,用「标题 → 简介 → 正文」三级结构控制读取量,并按放慢的艾宾浩斯曲线逐步压缩。规则文件只在你确认后才会被写入。默认每个工作区独立;也可以选择与另一个项目共用同一套记忆,或只读接取老库后继续写新库。
一句话:按工作区隔离、由你手动开启、规则必须经你确认的本地记忆库。
它把「这个项目长期有效的决定、偏好、约束」沉淀下来,而不是把所有聊天自动灌进模型。
它不是什么:
dsh-memory / dsh-memory-vault / dsh-mnemosyne / dsh-recall 的替代品:它们偏全局、自动或语义检索,这个插件偏项目隔离和可控性。适合:
不适合:
/.dsh-memory/;它就是一个普通文件夹,复制即备份。插件 · 更偏什么 · 和本插件的差异 dsh-memory · 全局、自动、SQLite FTS · 本插件按工作区隔离,且默认不自动记录 dsh-memory-vault · 跨会话记忆 + 设置页 · 本插件有规则确认、三种共享模式、遗忘曲线 dsh-mnemosyne · SQLite / CLI / 管理面板 / 语义 · 本插件更轻,纯文本、无外部 CLI dsh-recall · 对话历史三层检索、本地语义 · 本插件不索引全部聊天原文,只沉淀整理后的记忆
以上只描述定位差异,不代表谁更好;具体能力以各自 README 为准。
RULES.md 在提示最前;AI 只能提议,不能直接写。write / edit 被 guard 拦截,规则只能走审批。catalog.db。files/ 文件区,放在记忆库里,共用模式天然共享。settings.json。这些属于当前实现,不是永久承诺;后续版本可能替换为向量检索或完整设置页,但上面六条设计原则不变。
dsh plugin --profile web add @wafernm/dsh-memory-library安装后在 Harness 的插件页能看到「记忆图书馆 / Memory Library」。源码仓库根目录仍使用 @local/... 便于本地开发;npm run release:prepare 会生成 dist-release/,其中名称、patch 行和客户端模块 id 会统一替换成发布名。
npm test
npm run release:prepare
npm pack ./dist-release发布包只包含 index.js、client.js、lib/、cordis.patch.yml、locale/、icon.svg、README、LICENSE、CHANGELOG。
每个工作区一个目录:/.dsh-memory/
以下是当前版本的目录布局,属于实现细节;后续版本可能调整内部文件,但 .dsh-memory/ 这个根目录会保持。.dsh-memory/
├── RULES.md # 你确认过的规则(优先级最高)
├── INDEX.md # 给人看的目录,按主题分组
├── catalog.db # 目录柜(可重建;卡片仍是唯一真相)
├── settings.json # 本工作区的覆盖设置(容量、遗忘、注入、文件)
├── mode.json # 共用模式指针(可选;只读接取用 mounts.json)
├── mounts.json # 只读接取的外部记忆库及其过滤条件
├── sessions.json # 哪些对话手动开启了记忆(默认全部关闭)
├── .state.json # 上次整理 / 容量检查 / 待确认大文件
├── journal/
│ └── 2026-10-24.md # 每轮聊天:你的原话 + AI 回复要点摘录
├── library/
│ └── mem-xxxx.md # 记忆卡(front matter + 正文)
├── files/ # 可选:共用文件区(默认不存)
│ └── ab/cd/<hash>-原文件名.png
└── archive/
└── mem-yyyy.md # 已归档的记忆卡catalog.db)只存标题、一句话、标签、关联、文件信息、清晰度、上次想起时间;它丢了可以扫卡片重建。turn/end 时把本轮你的消息和 AI 回复摘录写入当天日记;开启文件保存时,聊天附件也会复制进 files/。memory_search / memory_read。全文/深挖不是默认行为。memory_propose_rule 只会弹出审批;你点允许后才追加到 RULES.md。工具 · 用途 memory_session · 开启/关闭本对话的记忆(默认关闭;开启需审批),status 查看状态 memory_search · 检索标题、一句话、标签;可按重要度、标签、确定程度过滤 memory_read · 按 id 读卡片全文;也接受 journal:YYYY-MM-DD、index、rules。读卡片会刷新清晰度 memory_write · 写入/更新记忆卡:标题、简介、正文、重要度、确定程度、标签、关联 memory_forget · 主动遗忘一张卡(不是自动衰减,是你的明确选择) memory_pin · 钉住/取消钉住;钉住的卡不自动变模糊 memory_status · 容量、卡片数、文件数、日志、上次整理、文件保存开关 memory_configure · 改容量、遗忘、注入预算、文件保存开关和 100 MB 阈值 memory_mode · 共用 / 只读接取+新库 / 完全独立;status 查看 memory_link · 只读接取另一个项目的记忆库:按标签/重要度/条数过滤,需审批 memory_file_save · 把工作区文件复制进 files/,可挂到某张卡;超过阈值需确认 memory_file_list · 列出记忆库文件(可按卡片过滤) memory_file_read · 查看文件信息和本机路径 memory_file_forget · 删除文件;被卡片引用时需要 force memory_consolidate · 立即执行一次整理(平时自动运行) memory_propose_rule · 提议新增规则,需在审批弹窗中确认
输入框工具行左侧有一个紧凑开关:
memory_session 的审批弹窗,因为按钮点击本身就是你的手动选择。按钮走插件自己的本地接口:
GET /dsh-memory-api/session?id=<sessionId> -> { enabled, mode, dir }
POST /dsh-memory-api/session {sessionId, enabled}接口要求页面内注入的随机 x-dsh-memory-token,并在 Host 侧复用同一套 store/mode 解析。如果浏览器的 CSP 拦掉了内联 token 脚本,同源请求(Sec-Fetch-Site: same-origin 或匹配的 Origin/Referer)以及本机回环请求也会被接受;跨站请求拒绝。
memory_read / 搜索到会回春。memory_forget。先在本对话开启记忆(memory_session action=on),再选模式;模式是工作区级设置,会话开关单独控制这个对话用不用记忆。在目标工作区的会话里说一句即可,AI 会调 memory_mode 并弹审批:
模式 · 你可以这样说 · 行为 共用 · 「当前项目和源工作区 D:\projects\other-project 共用记忆库」 · 读写都落到源库:条目、日志、规则、整理全部共用 只读 + 新建 · 「只读接取 D:\projects\other-project 的 shared 标签、重要度 ≥3、最多 30 条,新记忆写本地」 · 老库只读;当前项目继续写自己的新库 完全独立 · 「切回完全独立的记忆库」 · 清空外链,只用本地库;原有本地库保留
示例里的D:\projects\other-project只是占位,换成你自己的源工作区路径即可;macOS/Linux 上就是/path/to/other-project。
mode.json:{
"mode": "shared",
"source": "D:\\projects\\other-project\\.dsh-memory"
}m-xxx:mem-yyy。memory_search 同时搜本地和外链;memory_read 可读外链正文。mounts.json(tags 任一命中、minImportance、limit),可用 memory_link action=list 查看、action=remove 断开。[
{
"id": "m-abc123",
"label": "other-project",
"source": "D:\\projects\\other-project\\.dsh-memory",
"tags": ["shared"],
"minImportance": 3,
"limit": 30
}
]mode.json 并清空 mounts.json;本地库内容不受影响。文件放在记忆库的 files/ 里,所以共用模式下所有对话共用同一套文件;只读接取模式下源库文件只读。
设置:
{
"files": {
"enabled": false,
"confirmOverMb": 100
}
}files/,同一文件只存一份(按内容哈希去重)。memory_file_save 也可以显式保存;超过阈值同样确认。cordis.patch.yml)插件默认值,可被每个工作区的 .dsh-memory/settings.json 覆盖(可用 memory_configure 工具改):
maxStorageBytes: 5368709120 # 5 GiB(卡片 + 日记 + 文件 + 目录柜)
consolidationsPerDay: 3
slowdown: 2.5
captureSubagents: false
indexMaxChars: 3500
promptMaxChars: 4200
journalRetentionDays: 45
archiveRetentionDays: 180
files:
enabled: false # 默认不保存聊天附件
confirmOverMb: 100 # 超过 100 MB 单独确认
provider: '' # 留空使用默认模型
model: ''// .dsh-memory/settings.json(只写你想覆盖的键)
{
"maxStorageBytes": 10737418240,
"slowdown": 3,
"promptMaxChars": 5000,
"files": { "enabled": true, "confirmOverMb": 100 }
}catalog.db 丢了可以扫卡片重建;清晰度、上次想起次数会重置(卡片正文不丢)。write / edit;绕过工具用 shell 直接改文件,插件无法阻止。.dsh-memory/。