前言¶
在 DeepSeek Harness(DSH)里做长期协作时,模型往往只「记得」当前会话里的上下文。换会话、换天再开,项目约束、你的偏好、之前确认过的协作方式很容易丢。有人把要点写进仓库文档或随手笔记,但那不会自动进 system prompt,助手也不会在每轮结束后帮你整理。
下面介绍社区插件 dsh-zcode-workspace-memory(包名 dsh-workspace-memory):把 ZCode 的 Project / Workspace Memory 接到 DSH 上,在每个工作区落一份 Markdown 记忆目录,主会话开始时注入规则和索引,对话成功后还可后台自动提取补充;另提供只读页面浏览记忆。维护者为 moondrop12138。
这是什么¶
一句话:每个工作区一份持久 Markdown 记忆(MEMORY.md 索引 + 一事实一文件),注入主会话 system 段,并可在每轮成功对话后由后台发起额外模型请求做提取;子 Agent、只读会话等场景有明确边界(见下文「生效范围」)。
插件为 Host + Client 两半,纯 JavaScript、无构建步骤;记忆设计与提示词移植自 ZCode(Apache-2.0),本仓库第一方代码为 MIT。在 SkillHub 分类为「记忆」;GitHub 仓库见文末链接。
核心功能¶
持久记忆目录¶
记忆根目录为:
<workspaceRoot>/.dsh/memory/
MEMORY.md # 索引,无 frontmatter
<fact-name>.md # 一事实一文件
MEMORY.md 中一行一条指针,形如 - [Title](fact-name.md) — hook。事实文件带 YAML frontmatter 与 Markdown 正文,与 ZCode 一致。type 分为 user、feedback、project、reference 等;name 为小写 kebab-case(1–48 字符)。插件不会修改你的 .gitignore;若不想把个人记忆提交进仓库,可自行忽略:
echo '.dsh/memory' >> .gitignore
会话开始注入¶
主会话创建或恢复时,会把 ZCode 同源的 # Memory 使用规则与当前 MEMORY.md 索引注入 system prompt(每个 Agent 只读一次,会话中途不重读)。新写入或后台提取的记忆,要到下一个会话才会进入注入块。
模型主动写入¶
你对助手说「记住…」时,它按规则用宿主已有的 write / edit 工具写入记忆目录,并维护 MEMORY.md 指针。计划模式下写入会沿用宿主工具策略,可能被拦截(与 ZCode 允许写记忆的行为不同,属有意差异)。
后台自动提取(autoExtract)¶
每轮对话成功结束后(不阻塞主回复),插件可排队发起一次性模型请求,从本轮 user/assistant 文本中挑出值得长期记住的事实,写成事实文件并更新索引;也可按 JSON 中的 forget 删除文件与指针。默认开启,会产生额外 token 与费用;关闭后仍可只靠「记住…」手动维护。
提取会跳过:本轮模型已通过写工具写过记忆目录;或本轮没有「独立文本块且词数 ≥ 3」的用户发言(中文按 CJK 字符折半计词)。每轮最多 5 条事实;非法 JSON 或非正常结束则整轮放弃,不重试。提取请求不会写入会话日志,结论见宿主日志 %TEMP%\workspace-memory-host.log(每轮一行 extraction done / extraction skipped / extraction request failed)。
只读浏览¶
Client 半在左栏提供「工作区记忆」入口,整页列出有记忆的工作区与文件,以等宽原文查看,不渲染 Markdown;页面不提供编辑或删除。
生效范围¶
| 维度 | 行为 |
|---|---|
| 开关 | enabled 为 profile 级;开启后该 profile 下所有工作区主会话生效 |
| 隔离 | 按工作区:session.header.cwd 为记忆根,工作区之间互不可见 |
| 落盘 | 惰性:只有开过主会话的工作区才会 best-effort 创建 .dsh/memory/ |
| 子 Agent | session.header.origin === 'subagent' 时不注入、不提取 |
| 只读会话 | 规则段仍注入;不建目录、不提取;写记忆按沙箱被拒 |
与 ZCode 的主要差异之一:记忆放在工作区内 <cwd>/.dsh/memory/,便于 DSH 默认 workspace-write 沙箱下用原生工具维护,而不是 CLI 私有存储目录。
配置¶
在插件设置页或 cordis.patch.yml 中可改(字段以文档为准):
| 字段 | 默认 | 含义 |
|---|---|---|
enabled |
true |
总开关:注入、建目录、后台提取、页面数据 |
autoExtract |
true |
每轮成功后自动提取长期记忆 |
maxIndexChars |
25000 |
注入的 MEMORY.md 字符上限(另有 200 行上限) |
debugLog |
false |
更细诊断写入 workspace-memory-host.log |
安装与启用¶
从 GitHub 安装到指定 profile(命令来自仓库 README):
dsh plugin --profile <profile> add github:moondrop12138/dsh-zcode-workspace-memory
本地开发可用 plugin_manager 的 install_bundle,target 为插件目录绝对路径。Client 半改动刷新页面即可;Host 半改动需 remove_bundle 后重新 install_bundle。卸载示例:
dsh plugin --profile <profile> remove dsh-workspace-memory
仓库内自测:
cd dsh-zcode-workspace-memory && node --test
典型用法¶
- 安装并确认 profile 下
enabled为 true;可选关闭autoExtract以节省额外模型调用。 - 在某一工作区打开主会话,确认
.dsh/memory/已创建(只读会话不会建目录)。 - 手动记忆:发送例如「记住:这个项目用 tabs」——需为独立用户文本且足够长度,才符合自动提取资格;手动写入不依赖提取。
- 查看:点左栏「工作区记忆」,浏览
MEMORY.md与各事实文件原文。 - 排障:查看
%TEMP%\workspace-memory-host.log中每轮提取结论;需要细节时打开debugLog。
事实文件示例结构(摘自 README):
---
name: concise-memory-name
description: one-line recall description
metadata:
node_type: memory
type: project
originSessionId: sess_…
---
One durable fact.
适用场景与注意¶
适合需要按仓库/工作区沉淀约束、偏好与决策、且希望主会话自动带上记忆索引的 DSH 用户。不适合指望子 Agent 或只读会话自动维护记忆的场景。
安装前请自行阅读 GitHub 源码 与 LICENSE / NOTICE.md:插件以当前 DSH 进程权限运行,后台提取会发起真实计费请求。已知限制包括:索引指针在文件被外部删除后可能悬空、提取不可回放进会话日志、UI 只读等(详见 README「已知限制」)。
SkillHub 上的插件目录由社区维护,与 DeepSeek / 幻方无官方从属关系;星标与版本以页面与仓库为准(当前 package 版本为 0.1.0)。
链接¶
- 目录页:https://www.skillhub.cn/plugins/moondrop12138/dsh-zcode-workspace-memory
- 仓库:https://github.com/moondrop12138/dsh-zcode-workspace-memory
经过上面的步骤,你可以在 DSH 里用工作区本地的 Markdown 记忆,衔接 ZCode 那套「索引 + 事实文件 + 注入 + 可选自动提取」的流程,而不必每次从零复述项目背景。