🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话撤销标尺 tofe98/dsh-undo

DeepSeek 客户端
tofe9867 天前有提交已提供中文文档扫描:未发现敏感能力兼容 / 相关生态

回退到任意历史提示词并 fork 重新编辑发送

25.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/11 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/tofe98/dsh-undo.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 67 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 回退历史提示词
  • fork重新编辑发送

README

由 DeepSeek 最新模型翻译生成
dsh-undo 给 DSH 会话用的撤销按钮和侧边标尺:回退到任意更早的提示词,通过 fork 重新编辑它。 基于 Cordis 可逆性范式构建——会话日志就是上下文,撤销一条提示词会把上下文恢复到更早的前缀(一次撤回),全程不改动原始日志。 功能 - ↶ 撤销按钮,位于会话头部。悬停会打开下拉菜单,列出你之前提示词的轨迹(每个用户轮次一条,最近的排在最前)。选中一条会在该提示词之前的轮次边界处 fork 会话,打开 fork,并把提示词文本预填到输入框,方便你编辑后重新发送。 - 侧边标尺,位于会话左边缘(一个独立的小元素,不需要宿主做任何改动): - 每条用户/引导消息一个刻度——从第一条提示词起就始终可见(内置的查询导轨至少需要两条); - 刻度来自实时聊天快照,并带时间线兜底,所以正在运行或分窗的会话依然能每个轮次显示一个刻度; - 左键点击把会话跳转到该提示词; - 右键点击弹出确认,然后直接从标尺执行同样的撤销。 - 当前刻度跟随你的滚动位置。 安装 从插件市场入口安装,或直接执行: dsh plugin --profile web add github:tofe98/dsh-undo 不需要宿主端,不需要构建步骤,不需要 RPC:一切都从实时会话快照计算得出。 用法 1. 在一个会话里发送几条提示词。
展开完整文档(README 剩余 1 节)
dsh-undo

给 DSH 会话用的撤销按钮和侧边标尺:回退到任意更早的提示词,通过 fork 重新编辑它。

基于 Cordis 可逆性范式构建——会话日志就是上下文,撤销一条提示词会把上下文恢复到更早的前缀(一次撤回),全程不改动原始日志。

功能

- ↶ 撤销按钮,位于会话头部。悬停会打开下拉菜单,列出你之前提示词的轨迹(每个用户轮次一条,最近的排在最前)。选中一条会在该提示词之前的轮次边界处 fork 会话,打开 fork,并把提示词文本预填到输入框,方便你编辑后重新发送。
- 侧边标尺,位于会话左边缘(一个独立的小元素,不需要宿主做任何改动):
- 每条用户/引导消息一个刻度——从第一条提示词起就始终可见(内置的查询导轨至少需要两条);
- 刻度来自实时聊天快照,并带时间线兜底,所以正在运行或分窗的会话依然能每个轮次显示一个刻度;
- 左键点击把会话跳转到该提示词;
- 右键点击弹出确认,然后直接从标尺执行同样的撤销。
- 当前刻度跟随你的滚动位置。

安装

从插件市场入口安装,或直接执行:

dsh plugin --profile web add github:tofe98/dsh-undo

不需要宿主端,不需要构建步骤,不需要 RPC:一切都从实时会话快照计算得出。

用法

1. 在一个会话里发送几条提示词。
2. 悬停会话头部的 ↶ → 选一条更早的提示词 → 打开一个 fork 出的子会话,回退到该提示词之前,输入框预填该提示词文本。
3. 编辑后重新发送,或者右键点击标尺刻度 → 撤销(确认后),从侧边标尺走同样的流程。

注意:

- 原始会话保持不动——撤销是一次 fork(论文里的撤回语义:恢复而不销毁日志)。
- 子会话通过 DSH 的投影机制(harness 的缓存上下文路径)重建。
- 撤销会恢复会话状态,但被撤销轮次的外部副作用(文件编辑、网络调用)不会回滚——它们是系统边界之外的排放(论文 §6.1)。

工作原理

- 浏览器端读取实时会话快照:用 user/steering 节点得到轨迹,用轮次结束映射(chat.turnEnds)算出每条提示词的 fork 边界(上一轮的 turn/end seq)。
- 撤销调用 sessions.fork({ sessionId, atSeq: boundary }),打开子会话,并通过 inputActions.setDraft(text) 预填。
- UI 位于 conversation.session.header.actions(按钮)和 shell.overlay(下拉面板 + 侧边标尺)。

缓存命中:撤销 + 重发测试

撤销并重发同一条提示词会保留整个请求前缀,所以服务商侧前缀缓存应该复用它。我们做了端到端测量(DeepSeek 自动前缀缓存、deepseek-v4-flash、reasoning effort High):

| 运行 | 原始用量(assistant/chunk) | 单请求命中率 |
| 消息 1「ciao, mi piace deepseek」 | input=8107, cacheRead=1792 | ~22%(只命中共享的系统提示词前缀) |
| 消息 2「molto interessante, vorrei parlare con te」 | input=134, cacheRead=9856 | 98.7% |
| 撤销消息 2 → 原样重发 | input=6, cacheRead=9984 | 99.94% |

重发时,计费的 9 990 个输入 token 里有 9 984 个读自缓存——撤销加重发这套流程实际上就是一次完整的缓存命中。剩下约 6 个 token 是新用户消息重新序列化后的尾部(它在分叉里拿到了新的 id)。

为什么两次运行里对话的「Cache hit: 59%」都显示约 59%:

- 这个读数按会话累计,不是按请求:它把日志里每个用量块都加起来,包括第一次请求那次大规模的冷未命中(运行时上下文快照、技能目录的系统提醒、以及提示词本身都是新的)。两个会话最后都停在 (1792+9856)/(8107+134+1792+9856) ≈ 59%,因为分叉继承了父会话消息 1 的用量块,总数相同。
- 单请求的数字在会话日志里:assistant/chunk 事件带 {"type":"usage","usage":{...}},其中 hit = cacheReadTokens / (cacheReadTokens + inputTokens)。Trajectory 视图也会显示每个单元格的 cacheRead。
- 注意适配器的 inputTokens 字段并不统一(消息 1 报的是总数,后面的块只报新增 token),所以 UI 里的百分比可能低估真实命中率——原始块才是准的。

缓存命中优化的要点:

- 撤销(在上一轮边界处分叉)会保留整个消息前缀——这是前缀缓存的理想流程。
- 保持模型固定、系统提示词确定(本次部署里没有时间戳),并在服务商的缓存有效窗口内重跑;长时间空闲后第一次重跑会未命中,第二次才命中。
- 第一次请求约 18–22% 的下限来自跨会话缓存的共享系统提示词前缀;如果某个会话的第一次请求就已经是热的,那它从一开始就显示约 100%。

Structure

lib/
index.js # node half — empty apply so the Loader has a host-side row client.js # browser half — the whole feature (module-loader format) cordis.patch.yml package.json # dsh.bundle + dsh.client declarations

Development

插件是纯 JavaScript——没有构建步骤。开发期间想试用,可以通过 harness 的动态插件系统加载 lib/client.js,或者从本地路径安装这个包。

License

MIT
预览分享卡片长什么样 ↓tofe98/dsh-undo
分享 · DeepSeek Harness Hub
tofe98/dsh-undo

回退到任意历史提示词并 fork 重新编辑发送

这是你的仓库?认领条目

回到顶部