中文EN

dsh-handoff-session

sessionnpmMIT

为 DeepSeek Harness 提供会话交接:上下文压力到阈值时写交接文档与可搜索转录,并在新会话里自动继续。

下载量 / Downloads
438

安装

dsh plugin --profile web add dsh-handoff-session

沙箱测试

这个插件还没测过。提交测试 →

README

Session Handoff(会话交接)

DeepSeek Harness 的 Host + Client 插件:在长会话开始“降智”前,让模型自己判断一个合适的收尾点,写出交接文档,并在同一工作目录里自动开一个新会话继续干活。

它替代的手工流程是:让模型写交接文档 → 点“下一步” → 复制提示词 → 新建会话 → 粘贴。现在只需要模型调用一次 session_handoff。

它做了什么

1. 压力投影:折叠每个会话的 turn/start、step/start、request/context、assistant/message、tool/call、tool/result 事件,得到轮数、步数、上下文占用、累计 token、缓存命中率。

2. 动态提示:每次请求都会在运行时上下文里加入一段 <session-pressure>,告诉模型当前压力和 level(low / watch / recommended / urgent)。

3. 策略段:系统提示里加入“会话寿命与交接”规则,明确只在 recommended / urgent 且处于可持久化检查点时调用工具。

4. 交接工具:session_handoff 把目标、现状、已完成、待办、决策、关键文件、验证结果写进 <cwd>/.dsh/handoffs/handoff-<时间>-<会话>.md,同时在同目录写一份可检索的 handoff-<时间>-<会话>.transcript.md;用 sessionController.create() 新建会话;用 sessionController.prompt() 把“读交接文档 + 继续指令”发过去;最后结束旧回合。新会话只读摘要,缺细节时再按需 grep 转录,不会整份塞进上下文。

5. 界面:client.js 在输入框下方右侧只放一个 6px 状态点 + “会话交接”四个字,不占图标位、不挡内置状态。状态点的颜色随压力从绿 → 蓝 → 琥珀 → 红逐级变化(绿=健康、蓝=留意、琥珀=建议交接、红=尽快交接;交接中为琥珀色脉冲,完成后变回绿色),「会话交接」四个字的颜色也跟着同一套等级色走;配色只用 DSH 调色板里真实存在的 token(--dsw-alias-state-success/warn/error-primary 与 --dsw-static-blue-500),不再用会被解析成近黑色的 --dsw-alias-brand-primary。点这四个字展开面板,能看到三项阈值进度和解释。点“现在交接”会直接把交接指令填进输入框并发送,不需要复制提示词。交接完成后会自动切到新会话,也可以手动点“打开新会话”。

新会话不会看到旧对话,所以工具参数里的 summary 和 nextPrompt 必须是自包含的。

安装

从 npm 装(包名 dsh-handoff-session):

dsh plugin add dsh-handoff-session

装本地开发副本:在 DSH 里用 Plugin Manager 安装这个目录(绝对路径):

C:\Users\Santuo\Desktop\chajian

对应调用是 plugin_manager 的 install_bundle,target 传上面的目录。安装后 list_plugins 里应出现 Session Handoff / 会话交接。

这个包是 Host + Client bundle,没有构建步骤。Host 半负责投影、提示和工具;Client 半是输入框下方的“会话交接”文字按钮,用一个投影读取压力,不依赖 Host RPC。装好后刷新一次 Web 页面,Client 半才会进入页面。
刷新请在 DeepSeek Harness 桌面窗口里做(Ctrl+R),或使用 dsh web 打印的带 token 地址。直接打开裸的 http://127.0.0.1:<port> 会返回 401 dsh web authentication required,这不是插件的问题。

发布到插件市场

市场读的是 format 1 的索引 JSON(@deepseek-ai/dsh-plugin-market-index 是唯一的校验器)。有两条路:

路径 · 谁审核 · 前提

官方目录(awesome-dsh-plugin) · 维护者逐条核对 · 公开 GitHub 仓库 + dsh-plugin topic + 仓库创建满 1 天 + package.json 里声明 dsh.bundle

自托管索引(本仓库这条) · 没人审核 · 索引挂在一个 https 地址上,用户自己把它加进 Index sources

format 1 只认两种来源:npm(安装参数 <name>@<version>)和 git(安装参数 git+<url>.git#<commit>,commit 必须是 40 位小写 hex)。也就是说,代码必须先发到 npm 或推到公开仓库,索引才真的能装;纯本地目录没法被 format 1 表达。

生成索引

# npm 来源(推荐:装的时候不触发构建授权)
node market/build-index.mjs --name dsh-handoff-session

# 公开 git 仓库来源(有 GitHub 仓库之后)
node market/build-index.mjs --source git --name dsh-handoff-session --url https://github.com/<you>/dsh-handoff-session

# 生成后立刻用官方校验器自查
node market/build-index.mjs --name dsh-handoff-session --check --validator <path-to>/@deepseek-ai/dsh-plugin-market-index/lib/index.js

产物是 market/index.json(外加一份 market/icon.svg)。图标默认内联成 data: URL,所以索引挂在任何 https 目录下都能显示。常用参数:--title-en/--title-zh、--description-en/--description-zh、--version、--timestamp、--category、--registry、--icon、--out、--dsh-range(engines.dsh,值必须是 SemVer range)。

npm 来源会自动去 registry 查该版本的真实发布时间当 publishTimestamp;查不到就打警告(这时索引格式合法、但用户点安装会失败)。

托管 + 加源

1. 放进 Git 仓库用 raw 地址:https://raw.githubusercontent.com/<owner>/<repo>/main/market/index.json(本项目用的就是这条,max-age=300,5 分钟内生效,不需要任何额外服务)。也可以放 GitHub Pages(Settings → Pages → Deploy from branch → /docs 或根目录)。要注意 https://cdn.jsdelivr.net/npm/<pkg>/market/index.json 虽然能直接用,但 npm 包里的文件不可变、而且 jsDelivr 对不固定版本的路径缓存 12 小时,发新版后索引会滞后,除非每次都用 @<version> 固定路径。

2. DSH 里打开 Plugins → Discover,在 Index sources 里加这个 URL。

3. 刷新后列表里出现 会话交接,点安装即可;装的时候走的是上面那个 marketInstallTarget,所以 npm 包必须已经发出来(或 git commit 已经推上去)。

投稿到官方目录(可选)

完整操作手册见 [docs/catalog-submission.md](docs/catalog-submission.md)(建仓 → 加 topic → 等满 1 天 → 生成条目 → 提 PR → 合并后关联 npm)。要提交的内容就一个文件:

node market/prep-catalog-entry.mjs --owner <你的 GitHub 用户名>
# → market/submission/<owner>__dsh-handoff-session.yml

同时会把 repository / homepage / bugs 写进 package.json(npm 包只有指回收录的仓库,才会和条目关联、显示下载量)。

规则要点:awesome-dsh-plugin/awesome-dsh-plugin 只加一个文件 data/plugins/<owner>__<repo>.yml(字段:url、name、category、description.en,可选 zh / icon),README 由脚本生成、不要手改。维护者的硬性检查:package.json 必须有 dsh.bundle(只写 dsh.client 是最常见的被拒原因)、仓库有真实可用代码、仓库创建满 1 天、仓库带 dsh-plugin topic、描述与代码一致。分类用 session(Sessions & Messages)。icon 只收 GitHub 托管的位图(SVG 和第三方图床会被拒),所以仓库里备了 assets/icon-180.png(由 node market/make-icon.mjs 生成)。

发布准备状态

已发布:

  • npm:dsh-handoff-session@0.6.0(2026-11-03 13:51)、@0.6.1(14:29,带 repository 字段,npm 页面上已关联 GitHub 仓库)、@0.7.0(2026-11-05 14:44,新增「会话交接」左侧 6px 压力状态点,颜色顺序绿→蓝→琥珀→红)和 @0.7.1(2026-11-05,修掉 watch 档把 --dsw-alias-brand-primary 当蓝色用、结果渲染成近黑的问题,改用 --dsw-static-blue-500;文字颜色一律跟随等级色;描述文案补上「颜色随压力逐级变化」):https://www.npmjs.com/package/dsh-handoff-session,npm i dsh-handoff-session 与 dsh plugin add dsh-handoff-session 都验证可用。
  • 自托管索引:https://raw.githubusercontent.com/BlueOcean3214/dsh-handoff-session/main/market/index.json(Cache-Control: max-age=300,内容就是仓库里的 market/index.json,marketInstallTarget = dsh-handoff-session@0.7.0)。
  • 也试过 https://cdn.jsdelivr.net/npm/dsh-handoff-session/market/index.json:能用,但 npm 包里的文件不可变,发版后 publishTimestamp 只能写预估值;而且 jsDelivr 对 /npm/<pkg>/ 这种不固定版本的路径缓存 12 小时(回源节点之间还会不一致,purge.jsdelivr.net 也不保证立刻全清)。所以索引改由 Git 托管。
  • 包名定为 dsh-handoff-session(dsh-handoff 已被 zhijiangtang/dsh-handoff 占用,而且对方也是会话交接类插件;dsh-session-handoff、dsh-handoff-kit、dsh-continuity、dsh-session-continuity 同样被占)。
  • package.json:去掉 private,补 license: MIT、keywords、publishConfig.access: public;cordis.patch.yml 的 insert.name 与 client.js 的模块 id 已同步改名,client-selftest.mjs 里的断言也一起改了。
  • 仓库素材:LICENSE(MIT)、.gitignore(挡住 .dsh/ 里的对话记录)、.gitattributes(统一 LF)、assets/icon-180.png(180×180 市场卡片图标)。
  • 公开仓库:https://github.com/BlueOcean3214/dsh-handoff-session(2026-11-03 14:20 建仓并推送 main,dsh-plugin topic 已加,package.json 的 repository / homepage / bugs 已指向它;assets/icon-180.png 经 raw.githubusercon

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:5,最后更新 2026-11-05

链接

GitHub · Homepage · npm

同类插件