概览
dsh-task-memory
Task-isolated long-term memory for DeepSeek Harness: remember / recall / search stay inside one task boundary, with optional prompt injection.
README / ZH
插件文档
dsh-task-memory
English | 中文
面向 DeepSeek Harness 的任务隔离长期记忆插件。
记忆按任务分库,保存在 ~/.dsh/storages/task-memory/。写入某一任务的事实,对其他任务默认不可见,除非主动切换任务。
为什么做这个
多数 DSH memory 插件是全局或按 workspace 共享的。本插件把 task(任务) 当作隔离边界:
- 默认任务:由 session 的
cwd推导 memory_bind_task:把当前 session 绑到指定任务 vault- 搜索 / 读取 / 提示注入:不会跨任务边界,提示注入按 agent 级作用域注册——每个会话的系统提示只注入它自己任务的记忆
工具
| 工具 | 作用 |
|---|---|
memory_bind_task |
将当前 session 绑定到某个任务 vault |
memory_current_task |
查看当前 session 所在 vault(绑定 or 默认) |
memory_remember |
按 key 写入或更新一条事实 |
memory_recall |
按精确 key 读取 |
memory_search |
关键词搜索(英文 + 中文 bigram) |
memory_forget |
删除一条 |
memory_list_tasks |
列出所有任务 vault |
memory_clear_task |
清空某个 vault(需 confirm: true) |
安装
# 从公开 GitHub 仓库安装(建议钉完整 commit SHA)
dsh plugin --profile web add "github:wangyihao0001-oss/dsh-task-memory"
# 开发时 link 本地 checkout
dsh plugin --profile web add "$(pwd)"
安装后重启 Web UI(或重启 profile),先绑定任务,再 remember / recall / search。
上架 dsh.pub 后,也可通过目录页的安装说明 / dshpub 流程安装。
本地开发(不安装)
npm install
npm run build
npm test # node:test 单测
npm run smoke # 构建 + 冒烟
若你从 DSH 源码仓库启动:
pnpm dsh web --patch /absolute/path/to/dsh-task-memory/cordis.dev.yml
请把 cordis.dev.yml 里的绝对路径改成指向本仓库编译后的 lib/index.js。
配置
cordis.patch.yml 默认值:
injectLimit: 8 # 注入到提示中的记忆条数上限
injectMaxChars: 2400 # 注入块软字符预算
injectMaxEntryChars: 400 # 单条记忆在注入块中的字符上限(超出截断)
injectPrompt: true # 是否为当前任务注入置顶/近期事实
maxEntries: 500 # 每个 vault 的条目上限(>= 1);超出时淘汰最旧的非置顶条目(置顶永不被淘汰;新增超出上限会被拒绝,对已有 key 的更新不受影响)
可选 storageRoot 覆盖默认目录 ~/.dsh/storages/task-memory。
存储与可靠性
~/.dsh/storages/task-memory/
<task-id>.json
每个文件形如:
{
"taskId": "<task-id>",
"title": "<title>",
"updatedAt": 0,
"entries": [
{
"id": "m_…",
"key": "<key>",
"content": "…",
"tags": [],
"pinned": true,
"createdAt": 0,
"updatedAt": 0
}
]
}
- 文件是纯 JSON,可直接手工编辑或备份
- 写入通过临时文件 + 原子 rename,读取永远看到一致快照
- 同一任务的写入(含
memory_bind_task的标题更新、save、update)在进程内串行化(per-task 锁),并行 agent 并发写不会丢更新。读改写请优先用update,避免load→ 修改 →save覆盖并发写入。 - 置顶条目永不被淘汰;vault 满且可淘汰的只有置顶条目时,新增 key 会被拒绝并返回明确错误(避免"刚写入就被淘汰"的静默丢失);对已有 key 的原地更新(upsert)不受容量限制,仍会尽力收缩
- 启动时自动清理崩溃残留的
*.tmp(只清理超过 1 小时的,避免误删其他进程的进行中写入)
路线图
- ✅ 按 session 精确的提示注入(agent 级 scoped context,取代进程级 bind 猜测)
- 在同一套工具背后可选向量检索
- 小型 Web UI:浏览 / 置顶 / 删除 vault
许可证
MIT
