← Back to home@azazo1

dsh-copy-session-ref

在会话行菜单复制规范 @session mention, 粘贴到输入框即可召回该会话上下文

Stars
1
Language
TypeScript
Created
Sep 9, 2026
Updated
Sep 28, 2026
GitHub repo

Introduction

dsh-copy-session-ref

在 DeepSeek Harness 里放两个 "复制引用" 入口, 复制的都是规范 mention @[名称](dsh-session:...), 粘贴到输入框并发送即可召回该会话上下文:

  • 会话行菜单: 省略号菜单里多一行 "复制引用", 排在宿主自己的归档之后.
  • 会话行悬浮卡片: 鼠标停在会话行上展开的卡片里, 第一行就是 "复制引用".

两个入口都注册进宿主自己的 slot (sidebar.workspaces.session.menu.item 与 sidebar.session.row.hover), 会话身份与菜单开合由框架给出, 插件不去解析或克隆宿主的 DOM.

复制前会按可配置的正则规则把会话标题改写成引用名称, 避免标题里的空格让模型分不清 "名称" 与 "本次提示词" 的边界.

兼容 DSH 0.2.0-rc.1.

悬浮卡片里的一行

悬浮卡片由宿主渲染, 卡片本身点一下复制的是会话标题; 本插件的这一行点下去复制的才是 mention, 并且不会连带触发卡片自身的复制, 也不改宿主任何行为.

  • 只有已经有第一条消息的会话行才有这一行, 空白会话行不显示.
  • 这一行排在计划任务区块前面, 是卡片里 slot 区域的第一行.
  • 点击后行内短暂显示 "已复制" / "复制失败", 卡片保持展开.
  • 名称走下面这套命名规则, 与会话行菜单里的那一项完全一致.

命名规则

默认三条规则, 按顺序作用在标题上:

正则flags替换为
\s+gu-
"gu\"
^([\s\S]*)$u"$1"

于是 raw title 复制出的 mention 是 @["raw-title"](dsh-session:...), 发送后模型看到的是:

@"raw-title" 你这次写的提示词

标题里本来就有双引号时, 第二条规则先转义它, 第三条规则再包外层引号, 所以 my "cool" title 得到 "my-\"cool\"-title".

空标题经第三条规则得到 "", 模型看到 @"", 不需要额外兜底.

规则语义:

  • 每条规则等价于 label.replace(new RegExp(pattern, flags), replacement), 替换文本支持 $1 与 $&.
  • 规则按顺序应用, 后面的规则看到前面的结果; 可上下移动, 可单条停用.
  • pattern 留空的规则跳过; 正则编译失败的规则在复制时跳过, 不会让整条复制失败.
  • 规则跑完后只做最小转义: \ 与 ] 转义, 换行与制表符折成空格. 名称里出现 ] 时引用仍能解析, 但 DSH 气泡不会折叠成 chip.
  • 双引号不在这层处理, 它由默认第二条规则负责; 两层都做会把规则产出的反斜杠再转义一次. 规则算出的名称就是模型最终看到的名称, wire 层的 \ 与 ] 转义会被 Host 原样还原.

配置

设置 -> Plugins -> dsh-copy-session-ref 的 bundle 页:

  • 增删规则, 调整顺序, 勾选启用, 修改正则 / flags / 替换文本.
  • 表单是暂存语义: 保存才写入 profile 的 patch 层, 离开页面丢弃未保存的编辑.
  • 复制时读的是已保存的值, 表单里未保存的编辑不参与.
  • 正则或 flags 非法时表单标红并阻止保存.

规则也写在插件自己的 Config schema 里, 可以先看 cordis.patch.yml 的注释了解如何在 patch 层覆盖.

安装

Web 端装进 web profile:

dsh plugin --profile web add github:azazo1/dsh-copy-session-ref

本地开发:

just install
just build
dsh plugin --profile web add .

装完重启 dsh web, 浏览器里刷新一次页面, 因为 Client metadata 的扫描结果会在进程内缓存.

桌面端装进 desktop profile. 它由 Electron 应用独占管理, dsh plugin 会拒绝 --profile desktop, 所以要用应用内的插件管理器: 在插件页的安装入口填上面命令里对应的包名或本地目录. 装上后重启应用, 窗口刷新一次.

引擎版本线要求 @deepseek-ai/dsh-* 不低于 0.2.0-rc.1, 且仍在 0.2.x 上 (devDependencies 写作 >=0.2.0-rc.1 <0.3.0). 更早的引擎线装不上这个版本.

web 与 desktop 两个 profile 跑的是同一套 Web 应用, 桌面端只是多起一个 Host 子进程并给 <html> 打上平台标记, 所以同一份包在两边通用, 不需要分别构建.

开发

just typecheck
just test
just build
just check-client

just verify 会依次跑完以上四步.