前言¶
DeepSeek Harness(dsh)的 Web 界面默认跑在本机,会话列表在侧栏里。打开某一个对话之后,浏览器地址栏通常还是根路径。刷新页面、再开一个标签,或把当前地址发给同事,对方并不能直接落到同一条会话上,只能自己再点一遍侧栏。
社区插件 dsh-session-deeplink 做的事情很窄:把当前会话 ID 写进 URL 的 ?session= 参数,打开这条链接时再按参数切回去。它是 Web 客户端插件,不往 host 进程里挂服务。
本文按社区目录页、GitHub 仓库 README、客户端源码和 npm 包页交叉核对后整理。社区插件目录 deepseek-harness-plugin.com 是独立站点,和 DeepSeek / 幻方没有官方从属关系。DeepSeek Harness 本身的核心理念是「一切皆插件」,插件由社区各自发布。
这是什么¶
dsh-session-deeplink 是一款面向 DeepSeek Harness Web 客户端的会话深链接插件,由 R3alloc 维护,许可证 MIT。目录页把它归在「会话与消息」分类。截至 2026-08-18,GitHub 仓库 R3alloc/dsh-session-deeplink 星标为 6,npm 上的版本是 0.1.1。
它解决的问题是:让本机(或同一套会话列表)里的会话可以被 URL 直接寻址。README 写得很明确——只要该会话仍存在于 DSH 会话列表中,打开这条 URL 就会恢复到同一会话。它不是把对话内容发到公网的云分享,也不是跨机器自动同步会话存储。
仓库把插件拆成两半:
- Node 入口
src/index.ts:apply为空,不注入、不提供任何 host 服务,只为了让 Loader 能挂上这一行,并扫描到dsh.client声明。 - 浏览器端
src/client/index.ts:真正干活的部分。package.json里dsh.client.platform为web,并声明注入@deepseek-ai/dsh-client-runtime。
核心功能¶
根据 README 和客户端源码,能力可以概括成下面四点。
用 ?session= 打开指定会话¶
查询参数名固定为 session。地址形如:
http://127.0.0.1:3080/?session=session-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
3080 是 DeepSeek Harness Web UI 的默认端口,也是 README 里的示例。插件在会话列表进入 ready 之后读这个参数:目标 ID 在 sessions.list 里存在、且当前会话不是它,就调用 ctx.sessions.open(target)。只处理一次初始参数,之后不再根据 URL 反复打开。
目标不存在时,源码会打一条 console.warn,不会去 open。仓库测试覆盖了这种情况:地址栏改回当前有效会话,侧栏选择保持不变。
切换会话时同步地址栏¶
初始深链接处理完之后,插件订阅 sessions.list。当前会话变化时,用 history.replaceState 把 session 参数改成新的 ID。用 replace 而不是 push,所以切换会话不会在浏览器历史里堆一串几乎相同的页面。
保留其他查询参数和 fragment¶
同步时只改 session 这一个键,pathname、其余 query、hash 都留下。仓库测试覆盖了这种情况:页面原来是 /?mode=test#conversation,切换会话后变成带上 session=,同时 mode=test 和 #conversation 仍在。
没有当前会话时,会删掉 session 参数,而不是留下一个空值。
只跑在浏览器里¶
README 和 Node 入口注释都写了:不添加任何 host 服务。cordis.patch.yml 只是把 id 为 session-deeplink 的插件插进 profile 的 layer 栈,好让客户端半边进入浏览器 roster。
安装与启用¶
目录页给出的安装命令原文是:
dsh plugin add github:R3alloc/dsh-session-deeplink
仓库 README 则要求装进 web profile,因为这是 Web 客户端插件。作者给出的两种写法如下。
从 npm 安装(README 建议日常用这条,包里已经带好客户端 bundle,安装时不必再跑构建):
dsh plugin --profile web add dsh-session-deeplink
从 GitHub 安装:
dsh plugin --profile web add github:R3alloc/dsh-session-deeplink
Git 依赖会走包内的 prepare 脚本在本机构建。README 说明:pnpm 10 及以上可能要先在对应 profile 的 pnpm-workspace.yaml 里授权构建,再重新执行安装:
allowBuilds:
dsh-session-deeplink: true
如需可复现安装,目录页建议固定 commit 哈希。本文核对仓库 main 时,最新提交为 f6250b6c5ec6bcc8a6f715b59d034664f409281e(2026-08-14),可以写成:
dsh plugin --profile web add github:R3alloc/dsh-session-deeplink#f6250b6c5ec6bcc8a6f715b59d034664f409281e
目录页和 README 都提醒:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。
装完后重启 dsh web。
典型用法¶
- 启动 Web UI(官方仓库默认地址是
http://127.0.0.1:3080),打开任意已有会话。 - 地址栏应变为带
?session=的 URL。把这条链接收藏、复制到另一个标签页,或发给使用同一套会话列表的人。 - 用这条 URL 重新打开页面时,只要该会话还在列表里,界面会切到对应会话,不用再点侧栏。
- 之后在侧栏切换会话,地址栏里的 ID 会跟着变;刷新页面应仍落在当前这条会话上。
不需要额外配置项。源码里没有可调的选项对象,查询键名写死为 session。
适用场景与注意事项¶
适合这些情况:
- 本机同时开多个标签,每个标签钉住不同会话
- 把正在进行的对话做成书签,隔天用同一条 URL 回来
- 团队共用同一套 DSH 会话存储时,用链接指向某一条对话
使用前需要注意:
- 能力边界。链接能打开的前提是目标会话已经在当前 DSH 会话列表里。对方没有这条会话,打开链接不会凭空把对话内容拉过去。插件也不负责复制上下文、注册自定义协议。
- 只作用于 Web。
package.json声明dsh.client.platform为web。装到非 web profile 上,浏览器端逻辑不会生效。 - 版本。README 写明当前版本基于 DeepSeek Harness
0.1.0-rc.6开发。Harness 仍处于开发者预览,后续版本可能要同步更新插件。 - 安全。插件以当前 dsh 进程权限运行。从 GitHub 安装还会在本机执行
prepare构建。装之前应阅读src/client/index.ts、src/index.ts和 MIT 许可证。日常安装优先用 npm 包,避免安装阶段跑构建脚本。 - 失效行为。会话被删或 ID 写错时,插件只打警告,不会抛错中断界面;地址栏会同步成当前仍有效的会话。
小结¶
dsh-session-deeplink 把 DSH Web 会话变成地址栏里的一条查询参数:能打开、能同步、能保留其余 URL 片段,而且不往 host 侧加服务。功能面很小,但对「刷新丢会话、链接点不回去」这类日常摩擦是对症的。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-session-deeplink/
GitHub:https://github.com/R3alloc/dsh-session-deeplink