Repository navigation
Releases: domitor-syh/dsh-rollback
Release list
v0.5.1
-
修复切换工作目录后的相对路径捕获:文件工具的前镜像与宿主使用同一会话有效目录,派发前重新获取目录与目标;已记录的绝对路径不随后续目录切换变化。父子目录同名文件不会混用恢复依据;仅切换工作目录不新增文件修改归属。
-
目标不一致改为逐操作持久恢复缺口:工具派发结果或最终结果回报的规范路径与捕获目标不同时,排除该操作的不可信恢复收据,不拼接不同文件的前后态,也不覆盖原工具结果。独立持久记录调用 id、原始轮次、工具及预期/回报的规范路径,不保存文件正文;后处理失败前已发现的不一致也保留为缺口。
-
只阻断跨越存活缺口轮次的回退:后续正常轮次继续记录检查点,满足其余恢复条件时可回退;已知缺口在预览与执行时、文件或对话表层发生变更前阻止
fromTurn <= 缺口原始轮次的整个回退后缀,并报告缺口及之后可用的起始轮次。轮次列表只提供缺口之后的起点。重启后限制不变;同轮后续成功、no-op、净变化为零及检查点裁剪均不清除缺口。不提供跳过缺口的部分回退或仅撤回对话模式。恢复记录写入、读取等原有失败仍保守拒绝,可能阻止更大范围的回退,不承诺后续每次回退必然成功。 -
恢复事务重查晚到缺口:旧预览不能绕过新增缺口;恢复事务在文件操作前与对话标记提交前重查。如果文件恢复途中才发现缺口,停止继续恢复、保留事务与对话,允许
/rollback abort补偿已执行的文件操作,不将中途失败误报为完全没有修改文件。 -
新版宿主回归:覆盖目录切换后的创建、编辑、重启恢复、绝对路径、旧宿主目录回退分支、目标不一致,以及真实宿主的版本放行和旧入口加载;上下文分类统计验证更新为新版相邻 prune 定价协议。
-
当前适配目标更新为 DSH 0.2.1-rc.2:开发用 DSH API 包精确锁定到
0.2.1-rc.2,Cordis 更新为4.0.5;新增dsh-working-directory的开发依赖与纯类型增强,支持宿主可选读取会话有效工作目录。旧宿主保留目录回退路径,原兼容范围未收窄;旧版本在本次适配中未重新验证。 -
兼容闸门使用当前字段:将无效的嵌套
dsh.engines.dsh移至顶层engines.dsh,与保留的宿主 peer 范围保持一致;版本放行不等于功能验证。 -
移除退役 invariant 服务依赖:删除
dsh-invariants的 peer、开发依赖和类型导入;公开./invariant入口保留为已弃用的空操作,无必需服务注入,避免旧配置因入口消失而加载失败;主插件不依赖 companion。 -
文档与检查入口同步:中英文 README 说明当前目标、旧版验证边界及遗留入口;宿主类型检查说明更新到当前 API 版本,继续保留全部诊断。36 个测试文件、728 项测试以及类型检查、双语文档检查与构建全部通过;尚未进行 profile 安装、宿主重启或 GUI 端到端验收。
npm:@domitor-syh/dsh-rollback@0.5.1
完整变更:v0.5.0...v0.5.1
v0.5.0
0.5.0
0.4.0 之后累积的全部工作:架构与存储加固、回退执行边界、Web 客户端与文档。
界面决策:消息照常隐藏,刻度条不处理
- 撤销「隐藏右侧轮次刻度条」:刻度是等距绝对定位的,隐藏只会留下一格空槽;要合上必须从外部重排组件布局,而组件每次重渲染都会写回自己的位置 —— 结论是刻度条原样不动。
- 被回退的对话消息照常隐藏,改由宿主给出「回退边界」这一个数字驱动(/rollback state),不再依赖回退标记是否到达客户端切片。
正确性修复
- 重复回退同一轮:目标已被回退过时明确拒绝且不写入任何事件(此前会写入零宽区间、替换掉上一条标记,连带销毁其隐藏窗口)。
- 标记的 sourceEventSeqs 写法改为非升序:存储层会压缩严格升序的连续序号,而运行时字段只接受扁平整数 —— 压缩落盘的会话再也打不开。
其它
- 版本 0.5.0;package.json 顺带修掉一个 UTF-8 BOM。
- 门:683/683 测试(35 文件)· typecheck 无可静默项 · 中英 README 一致性校验通过。
npm: @domitor-syh/dsh-rollback@0.5.0 · shasum 9cdb097b1ceb4816ac82c9265caa2f74ffb48fc6
v0.4.0
0.4.0 - 对齐官方桌面端 UI,并修掉三处实测暴露的正确性问题
正确性修复
- 「新建文件」曾被记成
update:0.2.0 的write不发create标记,而before:""无法区分「新建」与「写入一个原本为空的文件」。现在由插件在工具运行前用ctx.fs.stat自己判定,回退到建之前时该文件被删除,而不是被恢复成空文件。 - 欢迎页之上的过程行不再残留:
syncHides原先只遍历聊天切片里的节点,表层替换留下的孤儿 DOM 座位从未被考虑,所以contentLeft: 0时屏幕上仍有一行。新增 Pass 4 直接移除——幽灵行不再能活过下一条消息。 - 边界扫描的归属修正:扫描发现的变化一律记在「发现它的那次边界」,不再记到确认过该文件的下一轮。此前会把删除记到前一轮,于是回退真正删除它的那一轮时,窗口把该记录排除,「找回」条目从预览里静默消失。
界面与交互(对齐官方)
- 回退弹窗的文件列表改为只读回执(要打开文件走右侧文件树)。
- 按钮圆角改为
--dsw-radius-sm(8px,与官方动作条按钮同值),图标 15→17px、描边 1.4→1(17px/1px 取自官方 end-of-turn 变体);弹窗圆角改为--dsw-radius-panel(28px,与官方 Modal / 输入框同值)。
命令
/rollback弹出官方popupSelect轮次选择,选中后打开与「回退」按钮完全相同的确认弹窗,因此继承受影响文件预览与图片回填。
适配与验证
- 适配 DSH 0.2.0-rc.2;
engines.dsh=>=0.1.5-rc.2 <0.2.0-0 || >=0.2.0-rc.2 <0.3.0-0。 - typecheck 零静音 · 206 用例 / 14 文件 ·
check:readmes· 宿主探针 18/18 · 中运行守卫 3/3 · 兼容闸门 6/6 · 指令菜单 10/10 · 双座位表 OK · 截断 6/6 · 标记准入 6/6。 - npm:
@domitor-syh/dsh-rollback@0.4.0
已知限制:没有任何官方接口能把「文件」送回输入框(图片可以);@路径 参考芯片回退后不回来,回来的只有那段文字。
v0.3.1
0.3.1 - 修正 DSH 兼容性声明
- 去掉虚构的上界:
dsh.engines.dsh由>=0.1.5-rc.2 <0.2.0改为>=0.1.5-rc.2。npm 上从未发布过任何 0.2.0 构建——已发布的 DSH 构建止于 0.1.7 的预发布版——写死上界等于声明一条并不存在的约束;开区间下界也是生态里的通行写法(如同类插件dsh-claude-style的>=0.1.5-rc.2)。 - README(中英):引用该字段的句子同步改写,逐版本兼容矩阵仍是权威说明(0.1.5-rc.2 已实测、0.1.1-rc.2 按设计支持、其余未验证)。
- 本次发布只改声明与文档:代码、行为、依赖与 bundle 内容均与 0.3.0 一致。
v0.3.0
0.3.0 - ?? DSH 0.1.5-rc.2
- ???:?? uiConversation ?????(???????);?????? useChat kit ??(?? session.chat ??);???????????? + ????????????????
- ??:session.events ? snapshotEvents();SessionView ????;????????,??????????????
- ????:?? 0.1.5 ? startSeq/endSeq ??(??????);???????????????
- 0.1.5 ????:sidebarRight.openResource?addAttachments/pruneAttachments????????????????
- ????(??????)? append ????????,hero ??
- 178 ???
v0.2.2
0.2.2
- ???????????????(????????????????,??? id ??;?? /rollback ????)
- ?????????????,??????:???? 500 ????????
v0.2.1
0.2.1
- ????????????????(????????)
- ??????????????
- ??????? 331 ? 136 ??(? 83 ? 34 token)
- README ??:???? + ???? + ?????? + ??
0.2.0
0.2.0
回退入口
- 每轮结束后都有回退按钮:正常轮次在回复的动作条上(位置不变),被中断的轮次在轮次页脚——被中断的轮次没有收尾回复,动作条上不可能有按钮
- 运行中一律禁止回退:任何一轮处于进行中都整体拒绝并给出可操作的提示,等它结束或暂停后再回退
- 移除模型工具:模型调用回退必然发生在"某一轮进行中",与上一条冲突;回退始终由人发起
文件回退
- 标签分四类:
恢复(文件还在、写回旧内容 · 绿)、找回(已被删除的文件放回来 · 蓝)、删除(撤销该区间新建的文件 · 红)、跳过(无法恢复) - 边界重扫 + 最后已知内容:每轮结束时复查文件工具碰过的路径,把被 shell 改写或删除的变化记到该轮 → 「模型用
write建、之后被pwsh删掉」的文件也能回退了 - 空目录清理:回退删掉它创建的文件后,把已清空且创建时间落在被回退时间段内的祖先目录一并删除(更早创建的目录会保留)
- 盘根写入兜底:Windows 上
write/edit无法操作盘符根目录正下方的文件(文件系统层写前会mkdir父目录,而盘根E:\会 EPERM);插件包装ctx.fs.writeText/editText让这两个工具可用,并保留原文件的字面匹配语义、行尾风格与权限位 - 跳过并继续:某个文件恢复不了不再中止整次回退——能恢复的照做、对话照样截断、结果里列出跳过项,且保留其记录以便下次回退重试(文件锁释放后即可成功)
正确性修复
- 超出保留范围的回退目标改为拒绝并告知范围(此前会静默按最旧的保留记录恢复,得到错误状态且无提示)
- 不再重放已被回退的轮次:日志只追加,回退只是追加一条标记;重启后从日志重建会把早已回退的轮次带回来(表现为文件列表出现旧文件,甚至可能删掉你后来重建的文件)
- 预读捕获的占位空串不再被当作"文件已清空"(此前可能让回退把文件写空)
- 空列表不再声称"无文件变更":插件看不见 shell 直接写出的文件,这种话它保证不了
界面
- 欢迎页:把整段对话回退掉之后正常显示,不会残留在对话中间或被带到别的会话
- 回退弹窗:逐条列出受影响文件及其动作,点击文件可在编辑器打开
- 回退按钮的注册带自检与故障上报,"按钮静默消失"不再可能无声发生