dsh-compact-relay

sessiontested: passnpmMIT

Context indicator for the DeepSeek Harness composer: segmented occupancy, compression points, and the native auto-compaction line (flashes red when crossed). Supports preview-then-confirm compaction (/bc), seamless handoff (the old session becomes "History N" while the new one keeps the name; a rela

下载量 / Downloads
3,381
依赖体积 / node_modules
15.81 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-compact-relay

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

<div align="center">

dsh-compact-relay · 压缩接力

DeepSeek Harness 输入框上下文状态指示与会话管理插件。

简体中文 · [English](README.en.md)

![npm](https://www.npmjs.com/package/dsh-compact-relay)

![DSH](https://www.deepseek.com/harness/)

![license](LICENSE)

![version](CHANGELOG.md)

![XERJ Corpus Hub contributor](https://hub.xerj.org/contributors/cfanzx)

收录于 XERJ Corpus Hub · 钉住 commit 435601b · MIT · 带署名

</div>

概述

本插件在输入框旁提供一个 28px 的环形状态指示器,用于实时展示上下文窗口占用率与压缩评估状态,帮助用户在触发自动压缩前主动管理上下文:

  • 灰色:低于最小压缩阈值,暂无需执行压缩。
  • 蓝色:常规容量区间已满,可执行手动压缩以释放空间。
  • 琥珀色(带缺口):达到建议压缩点(由缺口标识),点击可预览压缩估算数据并决定是否执行。
  • 红色:达到交接阈值,建议生成九段式交接文档并切换至新会话。

容量管理之外,插件还负责两件事:到线前用交接单换一个新会话接着聊;把值得回看的回复收藏起来,压缩时连同原文落档。

插件直接挂载于现有输入框旁,默认参数已针对 DSH 0.2.x 完成适配,无需改变既有操作流程。

核心功能

1. 状态可视化监控

指示环按压缩评估逻辑分段显色,只表达容量:模型或阈值判定的建议压缩点,以及 DSH 原生自动压缩线(按宿主实际 token 预算算出的触发点:deepseek-flash 约 69.3%(窗口 1.05M),配置阈值默认 80%)。0.5.1 起环上不再画消息位置,位置标记归 0.6 时间线。当上下文占用越过原生自动压缩线时,整环呈红色闪烁告警。交接提醒线晚于当前模型的实际触发线(−5pp)时,环上交接刻度旁会出现红色小警示,悬停卡与 /handoff 菜单也会同步标出「交接线已晚」。

上下文进入「可压缩区间」(最小压缩线到压缩线之间)时,插件会在系统提示里主动告诉模型当前容量与区间,模型据此判断「刚完成一个自然节点」时是否记录压缩节点(0.3.4 起;此前模型看不到容量,判断条件不可执行)。

鼠标悬停可查看详细数值:已用容量、累计压缩次数、当前操作建议、压缩判断点及原生自动压缩线。

2. 预览与确认压缩

执行 /bc 命令(或通过指示环菜单触发)可预先查看待压缩范围、消息条数及预计释放的容量空间,需经用户二次确认后方才执行。确认前可随时取消,未提交前不会修改任何历史记录。

0.5.3 起确认卡会列出「本段 N 条 · 已收藏 M 条 · 建议补 K 条」,展开本段已收藏条目与「建议先收藏」的候选(每条可一键收藏)——这是压缩前最后一次补救机会。已收藏的消息在压缩时把原文写进摘要的「收藏(本段)」目录,并在 ~/.dsh/dcr-favorites/snapshots/ 留快照。

3. 收藏与推荐收藏

收藏 = 给「这条以后可能想回看原话」留个预约,不是把正文存下来:

  • 两步走:点星(或命令)只写一行标记(项目级 JSONL,按会话链根存);原文只在压缩时落档——压缩后摘要里出现「收藏(本段)」目录,原文另存 ~/.dsh/dcr-favorites/snapshots/ 快照。所以「标了不压缩」= 只留一个序号,这是设计而非 bug。
  • 入口:助手消息底部星标;/favorite mark [seq] 可标任意已完成回复(不带 seq 标最后一条)。不需要会话开着:归档/关闭的会话也能按 seq 标记(0.5.3 起标记层不依赖活 agent)。
  • 星标常亮(0.5.5):已收藏的星标常亮——动作行收起时只显示这一颗星,鼠标移上去才恢复整行按钮;选择器不依赖宿主哈希类名,触屏与不支持 CSS :has() 的旧浏览器回退原行为。
  • 推荐收藏(半自动):每条助手回复落地后,小模型异步打分(0-100);够档位的星标会金色微亮并带「推荐」提示。三档:宽松 60 / 标准 75 / 严格 85(默认标准),另有必亮词与屏蔽词。只点亮、绝不自动收藏——确认仍要你点星或 /favorite mark。设置页可调档位/词表,并支持「试算」(粘一段原文按当前设置跑一次真实打分,只读)。
  • 压缩后再补标:若原文还在会话日志里,标记时当场写快照;读不到会明确报错,不假装成功。(从归档会话档案里读原文归 0.6。)
  • 压缩后的整理(0.5.4):建议候选只保留用户/助手消息,工具输出不再占名额;无正文条目的标题显示为「第 seq 条」;压缩完成后自动清空本会话的推荐建议,被压走的消息不再残留。

4. 结构化会话交接

执行 /handoff 会起一个后台交接任务并立即返回任务 id(0.5.7 两段式:再用 /handoff status 查进度或结果),完成后生成包含九个标准部分的交接文档(总体目标、约束条件、已完成项、当前进度、涉及文件、关键决策、已知问题、未完成项、下一步计划),并在当前工作区自动创建新会话、注入该文档并完成切换,原会话完整保留。菜单里的「交接新会话」入口会自动轮询进度并显示「已 Ns」,不需要手动查。

5. 接力条:交接链与双向跳转

交接之后,输入卡上方会出现一条「已接力自 历史 N:<原名>」的接力条;点开它就是一个会话导航菜单:

  • 完整交接链:点「完整交接链」才按需读取(不展开不发请求),一次列出整条链「历史 N:<原名>」(默认服务端只读持久化日志,祖先会话没打开也能读;老宿主回落逐级查询)。每行都能打开那一跳的交接单、点整行跳到那个会话(已归档的会先自动恢复)。最多回看 8 层,链路异常成环会自动停;某一层实在读不到时保留已读行 +「无法读取更早的链路 / 上一层会话未打开」,老宿主还会给「打开并继续」(打开那一层后自动续读),不影响菜单其他入口。
  • 父 → 子:把接力棒交出去之后,父会话侧的接力条变成「已交接给新会话」,「去新会话」一键切回这次交接出来的新会话(新会话若被归档过,也会先恢复再切)。
  • 置顶确认:交接后归档旧会话会取消它的侧栏置顶(宿主行为)。旧会话置顶时,交接预览先问一次:点「交接并归档(取消置顶)」才归档,点「只交接,保留置顶」则旧会话和置顶都留着。
  • 归档开关:交接预览里可以勾掉「交接后自动归档旧会话」(默认开);首次引导里也写了这个选项。
  • 强制归档(0.5.2):旧会话还有任务在跑时,自动归档会「保留可见、不停止任务」。确实要清理时,接力条菜单里有「强制归档旧会话(会停止后台任务)」:点开还会再确认一次,确认面板明确写「会停止旧会话上正在跑的任务(turn / 子代理 / 后台任务 / 定时任务),中断后无法恢复」;旧会话在侧栏置顶时会补「归档会同时取消置顶(宿主行为)」。默认不会自动做这一步,只有你在确认面板里点「强制归档(停止任务)」才会执行。
  • 宿主没加载会话也能显示(0.5.6-C):状态接口只认内存里的会话;宿主还没把它装进来的那一次(或会话头说有父会话、状态里却没有链),接力条会只读一次持久化日志兜底补上(不要求会话已打开),每个会话最多读一次盘;普通会话(状态明确说没有父会话)零额外请求。这一行为与 0.5.6-C 的真机诊断位(<html> 上的 data-cr-relay-dock / chain / state)一起,用来定位「接力条不显示」;取证步骤见 [docs/relay-bar-debug.md](docs/relay-bar-debug.md)。
老链(0.5.0 之前生成的会话)没有交接单路径记录,界面显示「暂无交接单」而不是猜一个——它会先向父会话只读回查一次。

0.5.8 新增

0.5.8 是「兼容 DSH 0.2.2-rc.1 + 双平台真机验收」版;逐条见 [CHANGELOG.md](CHANGELOG.md) 的 0.5.8 小节。
  • 兼容最新 DSH 0.2.2-rc.1:Windows 11 与 macOS 双平台真实 DSH Web GUI 加载 0.5.8,用真实 deepseek-flash 走通压缩 / 交接 / 子会话接续问答,并验证重启语义(任务中断可感知、会话跨重启持久)。
  • 5 处生产修复:Windows 路径兼容(resolveProfileDir 认盘符绝对路径)、鉴权 fail-closed(connection 同步抛错不再退化成只查 Host 的兜底)、子会话 flush 失败可见(不再报「完全成功」)、快照落盘 await 修复(不再恒 nosession)、落盘脱敏(bodyHead 写入前 redactSecrets)。
  • 客户端消费 childFlushFailed:命令卡与接力条把「新会话落盘未确认」如实呈现,不再报成功。
  • 测试 519 PASS:40 文件 / EXIT=0 / 519 PASS 行(Windows 实测)+ 契约 6/6 + 慢动作 10/10。
  • 已知限制:G6 双版本(0.5.6 客户端 ↔ 0.5.8 服务端)未做,仍登记为已知限制,不声称 0.5.6 混用兼容。

0.5.7 新增

0.5.7 是「长动作异步化」版;逐条说明见 [CHANGELOG.md](CHANGELOG.md) 的 0.5.7 小节。
  • 长动作不再依赖单请求:压缩、交接、交接预览改为「起后台任务 → 轮询」。job-start / job-status / job-cancel 都在 2 秒内返回;旧同步动作 15 秒没跑完回 202 {ok:false, code:'pending', jobId},客户端拿 jobId 接着轮询,不再赌浏览器/传输层能扛住 20 秒。
  • 进度与取消:toast 只显示「正在压缩旧会话…(已 12s)」这类已用秒数(不写百分比),点「取消」按 jobId 精确中止;取消是中性结果,已提交的压缩不回滚。
  • /handoff 两段式:/handoff 立即返回任务 id,/handoff status [jobId] 查进度或结果;命令不再把 UI 请求挂十几秒。菜单/指示环入口会自动轮询,不用手动查。
  • client-error 留档:浏览器侧 fetch 抛错 / 非 2xx / 空 body / 404 / 超时会上报一次(status / bodyHead ≤80 码点 / kind),用 dcr-debug failures --action client-error 可查,不再只有「没反应」。
  • jobs 是内存表:TTL 10 分钟、上限 50 条、宿主重启即丢(job-status 404 nojob →「任务已中断,请重试」);崩溃留下的孤立 start 事件行 10 分钟后读作 stalled。旧客户端(0.5.6)连新服务端只会看到 202 的 pending 文案,需升级后才会自动轮询。
  • 测试 489 → 516 PASS:新增 jobs-unit 15 条 + jobs-http 12 条;独立慢 e2e npm run test:e2e:slow 用本地 25s stub 实测 job-start 15ms、运行中 job-status 7ms、任务总耗时 25.2s(不进 npm test)。

指示环图例说明

指示环视觉元素 · 状态含义

灰色弧 · 低于最小压缩阈值,不建议压缩

蓝色弧 · 常规容量区间已满

琥珀色弧 · 已越过压缩判断点,适合执行压缩

红色弧 · 已越过交接阈值,建议切换新会话

环形缺口 · 建议压缩点(系统在可压缩区间主动提示模型判断;模型记录或到达压缩线时自动出现)

紫色刻度 · DSH 原生自动压缩线:按 min(窗口 × thresholdRatio, 窗口 − 输出预留 − headroomTokens) 算出的实际触发点(deepseek-flash 约 69.3%;thresholdRatio 配置默认 80%,只是理论上限)

整环红色闪烁 · 已越过原生自动压缩线,即将触发 DSH 原生自动压缩

0.5.1 起环只表

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::19,最后更新 2026-11-05

Links

GitHub · Homepage · npm

Same category