Cross-Workspace Memory:本地加密的 DSH 跨工作区记忆

前言

在 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 紧凑功能栏;工作区授权与本次会话关联严格分离。

  1. Composer Bar:总开关、本会话要选的工作区、索引/检索状态、来源摘要、锁定/解锁、紧凑模式。开关与勾选只更新本地 React 状态和本地 API,不提交消息、不创建会话。
  2. Workspace Selector(Settings):列出 DSH 本地工作区与手动导入源;支持临时/长期授权、暂停、撤销、默认检索策略。
  3. Search Panel / Results:自然语言查询,混合/关键词/本地向量,可按工作区、时间、分类、来源过滤;结果带相关度、可信度与来源定位(工作区 ID、会话 ID、事件序号等)。
  4. Knowledge Graph / Memory Timeline:在授权范围内做本地共现、分类与时间启发式(图谱不含正文)。
  5. 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(用于开发与运行仓库内测试脚本)。

典型用法

首次配置

  1. 打开 设置 → Cross-Workspace Memory。
  2. 创建本地保险库:口令至少 12 个字符。口令丢失不可恢复。
  3. 在「工作区」对需要检索的 DSH 本地工作区点击 授权并索引。
    - 「仅授权」只授予权限、不立即读会话,之后可手动「同步索引」。
    - 临时授权到期会自动删除该工作区索引。
  4. 回到当前对话,在输入框上方功能栏打开本会话开关,勾选本次要用的工作区。
    - 已授权但未勾选的工作区不参与检索。
    - 新会话默认关闭、空选择。
  5. 正常对话;模型只能通过上述三个 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 云历史」而非自动云同步的开发者。

务必注意:

  1. 插件以当前 DSH 进程与用户权限运行;安装前应自行审阅源码与 MIT 许可证,社区目录(skillhub)与 DeepSeek / 幻方无官方从属关系。
  2. 插件本身不发起外网请求;但当 AI 使用记忆时,所选片段会进入当前对话并由 DSH 发给当前模型服务商——这是使用记忆的必要传输,未授权内容不应进入。
  3. README 未提供 git clone 后的替代安装魔法命令;请按 DSH 本地 bundle 流程安装,不要使用本文未出现在资料中的配置项或版本号。

仓库内测试:npm test(README 记载 v0.0.2 为 20/20 通过);npm run benchmark 为本地检索基准。

结尾

Cross-Workspace Memory 把跨工作区记忆收束在「本地加密 + 逐工作区授权 + 逐会话范围 + 只读 Tool」这一条链上,用明确的不支持清单划清与 DeepSeek 云端的边界。若要查看元数据与文档索引,可打开 GitHub 仓库 或 skillhub 目录页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜