前言¶
在 DeepSeek Harness(dsh)生态里,插件可以扩展会话、命令和 UI。实际开发中很多人会同时在 pi、opencode、OpenAI Codex、Claude Code 或 WorkBuddy 里积累聊天记录、AGENTS.md / CLAUDE.md / CODEBUDDY.md、skills 和自动化任务。换到 dsh 时,如果只拷贝 JSONL 或 SQLite 里的对话,模型往往仍缺另一半上下文:指令文件、技能架、项目记忆和定时任务并不会自动跟过来。
下面介绍维护者 Chang-Tong 发布的 DSH Unified Context(npm 包名 dsh-unified-context,社区目录归类为工作流)。它把上述五类来源迁入 dsh,并用符号链接让各 Harness 读同一份真文件,而不是每个工具各存一份副本。
这是什么¶
DSH Unified Context 面向「要从其它 Agent Harness 迁到 dsh,且希望会话可继续、上下文不分裂」的开发者。插件在 dsh 内提供斜杠命令、composer 里的 同步 按钮,以及可选的 CLI(import.mjs);运行时主要依赖 Node 内置模块(含 node:sqlite、node:zlib 的 zstd)和 dsh 平台模块,无额外运行时依赖。
当前 npm 发布版本为 0.5.0,许可证 MIT,要求 Node ≥ 22.19(与 dsh 一致)。
核心能力¶
五种来源,一次迁入¶
插件支持从以下来源导入可恢复的 dsh 会话(格式在 README 中写明:pi / codex / claude-code / WorkBuddy 为 JSONL,opencode 为 SQLite):
| Harness | 迁移内容(据官方文档) |
|---|---|
| pi | 会话;agent / 模式提示词 → dsh skills;指令与技能上下文 |
| opencode | 会话;agent → dsh skills;指令与技能上下文 |
| OpenAI Codex | 会话;AGENTS.md 上下文;自动化 |
| Claude Code | 会话;CLAUDE.md 上下文;项目与 Agent 记忆 |
| WorkBuddy(腾讯) | 含真实工具结果的会话;CODEBUDDY.md 与 skills;项目记忆;自动化 |
会话 id 设计为稳定前缀(如 pi-<uuid>、oc-<id> 等),重复导入会跳过已存在项。
上下文用链接共享,而不是复制¶
/link-context 让各 Harness 通过符号链接读同一份 AGENTS.md / CLAUDE.md / CODEBUDDY.md 和同一个 skill hub。内容相同的副本会折叠为链接;内容不同的副本会报告冲突,默认不覆盖。项目记忆收敛到 <项目>/.agents/memory/,Agent 记忆收敛到 ~/.agents/agent-memory/<agent>/;默认策略为 authority,可选 merge 生成引用索引。
自动化与 Agent 形态转换¶
Codex 与 WorkBuddy 的自动化会翻译成 dsh 定时任务(RRULE 翻译),默认以暂停状态导入,便于先在来源侧停用再启用。dsh 内用 /import-automations,CLI 的 node import.mjs automations 仅打印计划,真正创建任务需要运行中的 dsh。
pi / opencode 的 agent 与模式提示词会落到 $DSH_AGENTS_HOME/skills,并在 frontmatter 记录 metadata.source / metadata.kind。
交互入口¶
- composer 工具行的 同步 按钮:等价于执行
/import-all,内联展示结果。 - 新的顶层会话:若检测到未导入历史,会询问是否迁移(可按项目记住决定,状态写在
$DSH_HOME/unified-context-state.json)。
安装与启用¶
插件已发布到 npm,并声明 dsh.bundle,通过官方 dsh plugin add 安装后会自动进入 profile 的 bundle 列表。
推荐一键安装:
dsh plugin --profile web add dsh-unified-context
安装后需 重启 dsh web 并刷新页面(旧页面 RPC 会断开)。验证方式:composer 出现 同步 按钮,且 /import-all 有响应。
也可指定版本或从 GitHub 安装(文档中的示例):
dsh plugin --profile web add dsh-unified-context@0.5.0
dsh plugin --profile web add github:Chang-Tong/dsh-unified-context
卸载示例:
dsh plugin --profile web remove dsh-unified-context
典型用法¶
Web 内快速迁移¶
- 重启 dsh web 后刷新页面。
- 点击 同步,或输入
/import-all。 - 在会话列表中按工作区查看导入会话;在 Automation tasks 页面查看迁移任务(默认暂停,确认来源侧已停后再恢复)。
完整迁移幂等:已导入会话、已有链接和相同自动化任务不会重复创建。
按需执行的斜杠命令¶
| 命令 | 作用 |
|---|---|
/import-pi … /import-workbuddy |
按来源导入会话 |
/import-agents |
pi / opencode agent → skills |
/link-context |
共享指令文件、skill hub、长期记忆(可加 --dry-run、--push、--memory=authority\|merge\|off 等) |
/import-automations |
迁移 Codex / WorkBuddy 自动化(默认暂停) |
/import-all |
会话 + agents + 上下文链接 + 暂停的自动化 |
/attach-workspaces |
为已导入会话补挂与原始 cwd 匹配的工作区 |
常用选项包括 --limit N、--project 子串、--since、--no-tools、--activate 等,详见仓库中文 README。
不启动 dsh 时的 CLI 预览¶
在项目包目录可用 import.mjs 做 dry-run 或局部写入(自动化创建仍依赖运行中的 dsh):
node import.mjs all # dry-run 预览
node import.mjs all --apply # 会话 + skills + 共享上下文链接
node import.mjs sessions codex --apply --limit 20
node import.mjs context --apply
配置要点¶
可在插件插入行覆盖默认值。文档列出的部分键如下:
| 键 | 默认值 | 含义 |
|---|---|---|
offerOnStart |
true |
新顶层会话是否询问迁移 |
piRoot |
~/.pi/agent/sessions |
pi 会话根目录 |
opencodeDb |
~/.local/share/opencode/opencode.db |
opencode SQLite |
codexRoot |
~/.codex/sessions |
codex 会话 |
claudeRoot |
~/.claude/projects |
claude-code 项目 |
workbuddyRoot |
~/.workbuddy |
WorkBuddy 数据根 |
timeZone |
Asia/Shanghai |
自动化 RRULE 翻译时区 |
skillsRoot |
$DSH_AGENTS_HOME/skills |
skills 输出目录 |
toolTruncate |
1000 |
工具参数截断长度 |
关闭启动时迁移询问示例:config: { offerOnStart: false }。
适用场景与注意¶
适合:已在 pi、opencode、Codex、Claude Code 或 WorkBuddy 中有大量历史,计划以 dsh 为主界面,并希望 同一份项目上下文 仍被多个 Harness 读取的场景。
需要注意:
- 插件随 当前 dsh 进程权限 读取本机会话目录、数据库和项目文件。安装前应阅读 GitHub 源码 与 MIT 许可证,确认路径与行为符合你的安全策略。
- pi、opencode、codex、claude-code 的来源通常只保存工具调用,不含真实 tool result;WorkBuddy 在来源记录了结果时会原样导入。FAQ 中说明了占位 result 的处理方式。
- WorkBuddy 的
SOUL.md/MEMORY.md等全局身份文件 不会 并入共享指令;MCP、provider 配置等也保持各 Harness 原生,不在此插件统一范围内。 - 社区目录 SkillHub 上的插件页 与 DeepSeek / 幻方无官方从属关系,属于社区收录;DSH 本身贯彻「一切皆插件」的扩展方式。
结尾¶
DSH Unified Context 解决的是 Harness 切换时的「半套上下文」问题:会话、指令、skills、记忆和自动化尽量一次迁入 dsh,并用符号链接维持单一真源。若你正在评估迁移,可从 dsh plugin --profile web add dsh-unified-context 装起,用 /import-all 或 同步 按钮跑一遍幂等导入,再按需细化 /link-context 与 /import-automations。