前言¶
在 DeepSeek Harness(DSH)里,不同工作区、不同会话的对话往往彼此隔离。要做跨项目的上下文回顾,常见做法是复制粘贴历史片段,或依赖云端同步——后者在权限边界和隐私上往往难以说清楚。维护者 YangHua-ovo 提供的 dsh-secure-memory(展示名 Cross-Workspace Memory)把目标定在「本地优先、加密存储、逐工作区授权、逐会话关联」,并明确拒绝官方未公开能力之外的绕过行为。下面按能力边界、安装与日常用法说明如何使用该插件。
这是什么¶
- 仓库: YangHua-ovo/dsh-secure-memory
- 社区目录: skillhub 插件页
- 分类:记忆;当前 README 对应版本 v0.0.2,许可证 MIT。
- 定位:在 DSH 本机内索引、检索已授权工作区(及手动导入的 DeepSeek 历史导出)中的对话文本,通过三个只读 Tool 把片段作为「不可信历史参考」交给当前会话的模型;授权与撤销只能在解锁后的 Settings 界面完成,Agent 不能自行扩权。
设计原则在 README 里写得很直接:安全优先于功能完整性,隐私优先于检索便利性;能力不足时选择明确拒绝,而不是绕过访问控制。
能力边界(使用前必读)¶
已支持¶
| 能力 | 说明 |
|---|---|
| DSH 本地工作区 | 通过 ctx.workspaceRegistry 读取列表 |
| DSH 本地会话 | 只读 ctx.sessionPersistence.open(id, 'read') |
| DeepSeek 历史导出 | 用户在官方 App/网页手动导出后,在本插件中导入 |
| 逐工作区授权 / 暂停 / 撤销 | 本地管理界面 + 加密保险库 |
| 逐会话工作区关联 | 输入框上方功能栏;默认关闭,新会话不继承其他会话 |
| 检索 | BM25 + 本地字符 n-gram 向量混合检索,范围限于本会话关联的工作区 |
| AI 侧 | xw_memory_search、xw_memory_context、xw_memory_status 三个只读 Tool |
| 安全与审计 | AES-256-GCM、scrypt、HMAC 审计链;秘密字段入库前脱敏 |
明确不支持¶
- 不能自动读取 DeepSeek 云聊天工作区(无公开 API)。
- 不能向 DeepSeek 云聊天页面注入插件结果。
- 不使用第三方 Embedding 或云端向量库;检索完全在本机。
- 手动导入的来源一律标记为
manual snapshot,不能包装成自动同步。
完整平台调查见仓库内 docs/01-platform-investigation.md。
核心功能(v0.0.2)¶
v0.0.2 把主操作入口迁到对话输入框上方的 Cross-Workspace Memory 紧凑功能栏;工作区授权与本次会话关联严格分离。
- Composer Bar:总开关、本会话要选的工作区、索引/检索状态、来源摘要、锁定/解锁、紧凑模式。开关与勾选只更新本地 React 状态和本地 API,不提交消息、不创建会话。
- Workspace Selector(Settings):列出 DSH 本地工作区与手动导入源;支持临时/长期授权、暂停、撤销、默认检索策略。
- Search Panel / Results:自然语言查询,混合/关键词/本地向量,可按工作区、时间、分类、来源过滤;结果带相关度、可信度与来源定位(工作区 ID、会话 ID、事件序号等)。
- Knowledge Graph / Memory Timeline:在授权范围内做本地共现、分类与时间启发式(图谱不含正文)。
- Security Center:禁止检索词、排除规则、自动锁定、一键断开、删除保险库等。
解锁 token 在 DSH 页面运行期内存复用;打开 Settings 在同一会话内可不重复输入口令,整页刷新或重启后仍需解锁(口令不持久保存)。
安装与启用¶
本仓库是本地 DSH bundle(含 cordis.patch.yml、lib/index.js Host 入口、lib/client.js 客户端 UI 等),README 未给出 dsh plugin add github:... 一类远程一键命令。安装方式以仓库说明为准:
- 开发环境:在插件管理器中使用
install_bundle,目标为本仓库目录的绝对路径。 - 用户环境:通过 DSH 的插件安装入口选择该目录(或先打包为本地包再安装)。
安装或升级后刷新页面。日常入口是输入框上方的功能栏;首次创建保险库、工作区授权、审计与删除在 设置 → Cross-Workspace Memory。
运行环境限制:插件仅在 127.0.0.1 / localhost / [::1] 的 DSH GUI 中工作;自定义域名或远程暴露会被拒绝。
package.json 要求 Node >= 22.12.0(用于开发与运行仓库内测试脚本)。
典型用法¶
首次配置¶
- 打开 设置 → Cross-Workspace Memory。
- 创建本地保险库:口令至少 12 个字符。口令丢失不可恢复。
- 在「工作区」对需要检索的 DSH 本地工作区点击 授权并索引。
- 「仅授权」只授予权限、不立即读会话,之后可手动「同步索引」。
- 临时授权到期会自动删除该工作区索引。 - 回到当前对话,在输入框上方功能栏打开本会话开关,勾选本次要用的工作区。
- 已授权但未勾选的工作区不参与检索。
- 新会话默认关闭、空选择。 - 正常对话;模型只能通过上述三个 Tool 在当前会话关联的有效授权范围内检索。栏内会显示检索状态与来源摘要。
导入 DeepSeek 官方历史¶
官方侧:设置 → 数据管理 → 导出所有历史对话(JSON/Markdown,单文件 ≤ 8 MB)。
插件侧:Settings →「工作区」底部「手动导入」。导入后来源标记为手动快照,不是实时云端连接。
数据目录与生命周期¶
数据位于:
%DSH_HOME%/secure-memory/profiles/<profile>/
主要文件包括加密状态 vault.enc 与独立审计 audit.enc。撤销授权会删除该工作区全部记忆与索引;暂停则保留密文但拒绝检索;「一键断开」与「删除保险库」按 README 描述清空授权、索引与密钥。插件不自动备份、不上传外网。
安全设计要点(摘要)¶
README 列举了十二条要点,实施时需一起理解,而不是只盯加密算法:
- 默认拒绝:无授权、暂停、过期、锁定或审计异常时拒绝检索。
- 权限先于检索:先构造有效授权集合,再取候选;禁止先全量检索再过滤。
- 逐会话最小范围:AI Tool 只用当前会话显式关联的工作区;不能因「已授权」自动扩展到所有会话。
- 最小收集:只索引
user/message与assistant/message文本;不索引系统提示、推理、工具参数/结果、图片附件等。 - 提示词注入隔离:历史内容转义与风险检测,高风险内容不进入 AI 上下文。
威胁模型与数据流见 docs/02-security-architecture.md。
适用场景与注意¶
适合:在单机 DSH 上做多工作区、多会话知识回顾;需要可审计、可撤销的本地记忆,且接受「手动导出 DeepSeek 云历史」而非自动云同步的开发者。
务必注意:
- 插件以当前 DSH 进程与用户权限运行;安装前应自行审阅源码与 MIT 许可证,社区目录(skillhub)与 DeepSeek / 幻方无官方从属关系。
- 插件本身不发起外网请求;但当 AI 使用记忆时,所选片段会进入当前对话并由 DSH 发给当前模型服务商——这是使用记忆的必要传输,未授权内容不应进入。
- README 未提供
git clone后的替代安装魔法命令;请按 DSH 本地 bundle 流程安装,不要使用本文未出现在资料中的配置项或版本号。
仓库内测试:npm test(README 记载 v0.0.2 为 20/20 通过);npm run benchmark 为本地检索基准。
结尾¶
Cross-Workspace Memory 把跨工作区记忆收束在「本地加密 + 逐工作区授权 + 逐会话范围 + 只读 Tool」这一条链上,用明确的不支持清单划清与 DeepSeek 云端的边界。若要查看元数据与文档索引,可打开 GitHub 仓库 或 skillhub 目录页。