跳到主内容

dsh-task-memory

6Star0Fork0Issue0Watching

为 DeepSeek Harness 提供任务隔离的长期记忆:每个任务的记忆独立成库,记忆读、写、检索与提示注入都只在当前任务内生效。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科

安装

命令web profile
$ dsh plugin --profile web add github:wangyihao0001-oss/dsh-task-memory

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 wangyihao0001-oss/dsh-task-memory:先查看仓库 https://github.com/wangyihao0001-oss/dsh-task-memory 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

为 DeepSeek Harness 提供任务隔离的长期记忆:每个任务一个独立的 vault,记忆写入、读取、检索与提示注入都只在当前任务边界内生效,避免不同项目之间的记忆串味。

核心能力

  • 按任务分库存储:每个任务在 ~/.dsh/storages/task-memory/<task-id>.json 下持有一份独立 vault,记忆永远不会跨任务自动泄露
  • 8 个 memory 工具:模型可通过 memory_bind_task / memory_remember / memory_recall / memory_search / memory_forget / memory_current_task / memory_list_tasks / memory_clear_task 完整管理记忆
  • 默认任务自动推导:未绑定时按 session 的工作目录(cwd)哈希生成稳定任务 id,无需手动配置即可"按目录隔离"
  • 提示注入按会话隔离:每个 agent 的系统提示只注入该会话所属任务的记忆,优先置顶条目,再补近期条目,受字符预算约束
  • 容量与并发安全:vault 容量上限可配;置顶条目永不淘汰;新 key 满时显式报错而非静默丢弃;同任务写入经进程内异步锁串行化
  • 原子写入与崩溃恢复:每次保存走"临时文件 + 原子 rename",启动时清理超过 1 小时的崩溃残留 tmp 文件

技术实现

  • 语言: TypeScript(src/index.ts / src/store.ts / src/search.ts,编译为 lib/index.js,type: module ESM)
  • 关键依赖: 宿主 peer 依赖 @deepseek-ai/cordis ^4.0.1、@deepseek-ai/dsh-agent ^0.1.0-rc.8、@deepseek-ai/dsh-tools ^0.1.0-rc.6、@deepseek-ai/dsh-system-prompt ^0.1.0-rc.6、@deepseek-ai/dsh-home-paths ^0.1.0-rc.6、@deepseek-ai/schemastery ^3.18.1;运行时仅用 Node 内置 node:fs/promises / node:path / node:crypto
  • 架构模式: Cordis 单面插件——export const name = 'task-memory'、export const inject = ['tools', 'systemPrompt'];通过 dsh.bundle.patch 指向 cordis.patch.yml 注入宿主层,注册 8 个工具 + 1 个固定 systemPrompt section + 1 个 agent-scoped systemPrompt.context
  • 入口文件: src/index.ts(导出 apply(ctx, config),完成工具注册、提示注入、session-task 绑定清理、tmp 清理与默认任务缓存预热)

适用场景

同一个 DSH 里同时维护多个项目(前端 + 后端 + 实验脚本)、用 DSH 做长期研发助手、且不希望模型把 A 项目的技术栈约定误用到 B 项目的用户。痛点是多数 DSH 记忆插件要么全局共享、要么按 workspace 切,对"同一工作树里多线任务并行"的人不友好;这个插件把 task 当边界,副产物还顺带解决了"会话级别提示污染"——每个 agent 会话的系统提示只看到自己任务的记忆。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness (DSH)>= 0.1.0-rc.8由 package.json#peerDependencies 中 @deepseek-ai/dsh-agent ^0.1.0-rc.8 决定;其他 dsh-* peer 均为 ^0.1.0-rc.6
Node.js>= 20package.json#engines.node 声明
@deepseek-ai/cordis^4.0.1peer 依赖,由宿主 DSH 提供
@deepseek-ai/dsh-tools^0.1.0-rc.6peer 依赖,封装 defineTool 帮助注册 8 个工具
@deepseek-ai/dsh-system-prompt^0.1.0-rc.6peer 依赖,提供 systemPrompt.section / systemPrompt.context 注入点
@deepseek-ai/dsh-home-paths^0.1.0-rc.6peer 依赖,用于解析 resolveDshHome() 取 ~/.dsh
@deepseek-ai/schemastery^3.18.1peer 依赖,对 Config 做 schema 校验
平台跨平台仅依赖 Node.js 内置 fs / path / crypto,无原生模块
原生模块无全部使用 Node 内置 API,无 node-gyp 编译产物
安装 profileweb(或任何加载 Host tools 的 profile)cordis.patch.yml 注入到宿主的工具与系统提示层

安装方式

dsh plugin --profile web add github:wangyihao0001-oss/dsh-task-memory

配置项

配置位于 cordis.patch.yml 的 config 字段,Schema 由 src/index.ts 的 Config 校验,所有字段都有默认值,可零配置运行:

配置类型说明默认值
injectLimit数字注入到当前任务系统提示中的记忆条数上限8
injectMaxChars数字整个注入块的软字符预算(超出时停止拼接新条目)2400
injectMaxEntryChars数字单条记忆在注入块中的字符上限(超出截断)400
injectPrompt布尔是否为当前任务注入置顶/近期事实(按 agent 作用域)true
maxEntries数字(>= 1)每个 vault 的条目上限;超出时淘汰最旧的非置顶条目500
storageRoot字符串可选,覆盖默认存储根目录 ~/.dsh/storages/task-memory""(空字符串走默认)

修改后需要重启 dsh web(或重启 profile)让 Cordis 重新加载。

常见问题

Q: 卸载插件后记忆文件还在吗?

A: 在。记忆以纯 JSON 保存在 ~/.dsh/storages/task-memory/<task-id>.json,从 profile 移除 bundle 不会删除这些文件;想彻底清理需要手动备份或删除该目录。

Q: 提示注入的内容会跨任务串味吗?

A: 不会。注入按 agent 作用域注册(agent.ctx.systemPrompt.context),每个会话的系统提示只包含它自己所属任务的记忆;其他任务、其他会话、其他 agent 的记忆永远看不到。

Q: 关键词搜索支持中文吗?

A: 支持。检索会做英文 token 切分 + 中文 bigram(相邻两字组合)匹配(见 src/search.ts#tokenize),但仍是词法匹配,不支持向量检索或语义相似度。

Q: vault 满了之后再写新 key 会怎样?

A: 写入失败并返回明确错误(提示先 forget 或 unpin 一些条目),绝不静默丢弃刚写入的事实;但对已有 key 的就地更新(upsert)不会因容量被拒,会尽力收缩非置顶条目。

Q: 还需要手动指定 taskId 吗?

A: 默认不需要:没绑定时由 session 的工作目录(cwd)哈希生成稳定任务 id。需要同时跑多个项目时调用 memory_bind_task 显式切换。

Q: 怎么在生产环境固定版本?

A: 安装时在包名后追加 40 位 commit SHA,例如 dsh plugin --profile web add "github:wangyihao0001-oss/dsh-task-memory#<sha>",避免上游更新被自动拉到。

Q: 升级/卸载后要重启 DSH 吗?

A: 要。插件通过 cordis.patch.yml 注入宿主的 Cordis 层,安装或移除后必须重启 dsh web(或重启 profile)让 Cordis 重新加载。

Q: 能把敏感信息写进记忆吗?

A: 不建议。README 与 8 个工具的描述都明确提醒不要写入密钥、token、个人隐私;vault 是纯 JSON,备份或人工编辑时一样会落盘。

上手难度

入门 — 安装后无需任何配置即可获得"按 cwd 自动分任务 + 8 个记忆工具 + 提示注入"能力;所有偏好都能在 cordis.patch.yml 的 config 字段按需调整。

已知问题与限制

  • 检索是词法匹配:英文 token + 中文 bigram,不支持向量检索或语义相似度(src/search.ts:8-50)
  • 暂无浏览 vault 的 Web UI:目前是 Host-only 组合包,vault 只能通过工具或直接编辑 JSON 文件管理
  • 隔离边界仅作用于本插件的 task id:不沙箱化 DSH 其他插件或工作区本身
  • tmp 清理保守:启动时只清理 > 1 小时的崩溃残留 tmp,避免误删其他进程的进行中写入(src/store.ts:189-208)——代价是 1 小时内的 tmp 会留到下次启动
  • 卸载不删数据:从 profile 移除不再清空 ~/.dsh/storages/task-memory/,需要手动备份或清理
  • 容量上限对已有 key 透明但对新增 key 严格:vault 满且可淘汰的只有置顶条目时,新 key 写入会报错(避免"刚写入就被淘汰"的静默丢失),需要先 forget 或 unpin
  • 同任务写入是进程内锁:跨进程/跨机器不互斥,vault 文件可手工拷贝但并发写入需自行协调
  • 工具提示词会消耗上下文:memory_bind_task / memory_search 等 8 个工具的描述随工具列表加载到模型上下文,频繁切换任务或开多任务并行时占用可观的 token 预算

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/wangyihao0001-oss/dsh-task-memory)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录