dsh-session-link: DSH Plugin for Sharing Context Across Sessions

前言

用 DSH 做开发时经常遇到这种情况:会话 A 刚把一个问题分析透,会话 B 接手相关工作,需要 A 的完整上下文。没有专门工具时,路径是导出会话日志、把文件挪过去、解压,再手工读 zstd 压缩的 JSONL——文件在会话之间“搬运”一遍,成本不低。

dsh-session-link 把这件事压缩成一次复制、一次粘贴:会话头部一键复制当前会话的 @session-<uuid> 引用,粘到另一个会话发送后,模型调用 session_read 工具,把那条会话的对话内容以 user: / assistant: 文本的形式读回来。下面介绍它的功能、安装和用法。

这是什么

dsh-session-link 是 DeepSeek Harness(DSH)的插件,由 jinhuang712 维护,采用 MIT 许可证。DSH 的理念是“一切皆插件”,这个插件针对的是会话之间的上下文共享:它不改模型的记忆机制,而是让任意一个本地会话可以被另一个会话以引用方式读取。

安装后它提供三样东西:会话头部的复制按钮、输入框里的 @ 会话提及来源、以及 session_read 工具。另外附带一个同名 companion skill,教模型何时以及如何读取引用。

核心功能

复制当前会话引用

会话头部新增按钮「🔗 复制 Session ID」,点击即把当前会话的 @session-<uuid> 引用放入剪贴板。这是纯剪贴板操作,没有 host 往返,按钮点击后会翻转为「✓ 已复制」。

@ 提及按标题列会话

在输入框输入 @,会话来源分组按标题列出所有本地会话,可按标题或 id 搜索。选中一项即在输入框插入引用 chip,不需要切换会话。

引用渲染为 chip

@session-… 引用在已发送气泡中以蓝底白字渲染。重绘的作用域做了精确限定,不会影响其他类型的 @ 提及。因为引用是结构化 chip 而不是一串需要解释的文本,对方拿到后模型就知道该怎么处理。

session_read 工具

模型侧的工具,可解析三种引用形式:

  • @session-<uuid>:精确匹配,推荐使用,复制按钮产出的就是这个格式;
  • dsh-session: URI:链接载荷的 URI 形式;
  • @title:按标题精确匹配;未命中或有歧义时返回候选列表和 id,需要按 id 重试。

返回字段为 { sessionId, title, cwd, logPath, seqRange, transcript, truncated }。工具是只读的、live-first:读取反映运行中会话的当前状态,沙箱会话同样支持。

投影行为可通过参数控制:

  • maxChars:投影的字符预算,默认 64000;
  • truncate"tail"(默认)保留最近的对话行,"head" 保留最早的;
  • raw:调试用,返回原始 JSONL 的前 200000 字符。

随附 companion skill

安装时通过 dsh.skills 声明注册同名 skill,内容是给模型看的使用说明,让它知道遇到引用时该调用什么工具、传什么参数。

安装与启用

固定版本安装,构建产物已提交,无需本地构建,也不涉及注册表:

dsh plugin --profile web add "github:jinhuang712/dsh-session-link#v0.1.0"
# 重启 dsh web 并刷新页面

如果想跟踪未发布的提交,可以固定到 main 分支:

dsh plugin --profile web add "github:jinhuang712/dsh-session-link#main"

也可以从本地检出以 link 方式安装:

git clone https://github.com/jinhuang712/dsh-session-link.git
dsh plugin --profile web add "link:$PWD/dsh-session-link"

如果你的 dsh profile 目录本身是一个 pnpm workspace,pnpm 会要求先传 -w 才能操作 workspace 根目录,把它透传给命令即可:dsh plugin --profile web add -w …

安装并重启后,头部按钮、@ 菜单分组和 session_read 工具在所有会话中永久可用。

典型用法

把会话 A 的上下文交给会话 B,完整流程是:

1、打开会话 A,点击头部「🔗 复制 Session ID」;
2、切到会话 B,把引用粘进输入框(显示为 chip)后发送;
3、模型调用工具读取引用:

session_read({ "link": "@session-7fc2d98e-…" })

返回结果包含会话的 titlecwduser: / assistant: 形式的对话文本。

如果只是想引用某个会话而不切换过去,在输入框输入 @,在 session 分组里按标题找到目标会话插入即可。

注意 @title 形式是精确标题匹配,未命中或有歧义时工具会返回候选和 id,按 id 重试即可。

边界与注意事项

几条实测出来的边界,用之前需要知道:

  • 中文标题不会渲染为 chip:随附的 @ 提及正则缺少 /u 标志,@分析… 这类引用不会被重绘。因此复制格式始终是 id 而不是标题,就是为了绕开这个问题。
  • @title 解析依赖 host 的 sessionQuery 标题快照:该能力不可用时,工具会明确说明并指向 id 形式。
  • 读取是只读且 live-firstsessionQuery.readSession 反映运行中会话的当前状态;磁盘日志路径仅作为参考信息(logPath)返回,插件绝不写入。

另外,插件以当前 dsh 进程的权限运行,安装任何第三方插件前都建议先阅读其源码和许可证。这个插件是 MIT 许可,仓库公开,装前检查一遍成本不高。

需要卸载时:从 web profile 的 cordis.patch.yml 中移除 dsh-session-link 的 insert 行;再从 dsh.profile.bundles 中移除该依赖并运行 pnpm remove

小结

dsh-session-link 解决的问题很具体:会话之间的上下文传递,不需要导出、搬运、解压、手工读日志这一套流程,一次复制加一次粘贴就完成。引用是结构化的 chip,读取是只读投影,行为边界都有明确说明。

插件收录在社区目录(独立站点,与 DeepSeek / 幻方无官方从属关系):https://www.skillhub.cn/plugins/jinhuang712/dsh-session-link ,源码仓库:https://github.com/jinhuang712/dsh-session-link 。

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

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

Xiaoye