Repository navigation
Releases: daha1216/dsh-retrace
Release list
v0.4.77 — 回退可撤销,短码不再改写标题
0.4.72–0.4.77 六版合并发布:回退可撤销、撤回语义澄清、时间线行精简,以及「短码不再改写会话标题」的修复。
回退可撤销(0.4.72 / 0.4.73)
回退产物前,插件会先把将被覆盖的字节按内容哈希存进产物库(上限 32 个文件 / 16 MB,任一项读不到就不提供撤销,避免给出残缺承诺)。回退成功后返回一个 30 分钟有效的撤销票据,界面出现撤销条:
- 撤销把被覆盖的文件逐字写回,删掉回退新建的文件;
- 票据一次性、按会话归属,过期返回
undo-expired,用掉返回undo-not-found; - 撤销期间这些字节会被 GC 保活,窗口关闭后才可回收;
scope=both时撤销只覆盖文件,对话部分的回退不可撤销,提示文案会如实说明。
撤回语义(0.4.72)
「撤回」实际隐藏的是这条消息及其之后的全部内容。两个 chip 的 title/aria-label 与确认态文案都改成这个说法,不再让人以为是删除单条。
时间线行精简(0.4.72)
每行原来堆着三个按钮和「10-25 13:04」这种无年份时间。现在只保留「回退预览」主操作,跳转与轨迹收成图标按钮,行内显示相对时间(刚刚 / N 分钟前 / 昨天 14:32 / N 天前,超过 30 天回退绝对时间),绝对时间与版本号放进 tooltip。
短码不再改写会话标题(0.4.74–0.4.77)
0.4.56 曾删掉自动写标题的逻辑,但那次改动在合并远端分叉时被覆盖,于是每次撤回操作又会把 [短码] 前缀写进标题。本版彻底移除写入路径:
- 短码只做界面展示,任何操作都不再写
session/title; - 改名按钮只写你输入的文字;
- 已经写进去的旧前缀会被清理:启动时扫一遍驻留会话,之后每个会话被加载时再检查一次(0.4.77 补上后者,否则启动后才打开的会话会被漏掉);
- 前缀匹配大小写不敏感(0.4.75),因为真实短码是
dd833FF000这种混合大小写。
升级须知
- 部署后需重启宿主才会生效。
- 旧前缀的清理是「读到时修」,不保证立即全部消失。
- 撤销票据只在内存中保存 30 分钟,宿主重启即失效。
验证
npm run check 通过(语法、版本号、bundle 同步)。隔离测试:数据层 39/39、客户端 43/43、能力门控 10/10、F 边界 9/9、存储 CLI 8/8。
v0.4.71 — 去重内容不再被误判为不可信
修复
内容去重(同一份字节只存一次)会让多个边界共用一条元数据行,而这一行的 createdAt 记的是最早那个边界的时间。结果是一条今天刚捕获的引用,只要文件内容恰好和很久以前存过的一样,就会被判成「早于捕获纪元、无法证明属于该边界」,在回退时被拒绝。
0.4.71 给每条引用单独记录捕获时刻(refAt 字段),racy 判定改为看该引用自己的时间。0.4.71 之前写入的行没有这个字段,仍然回退到原来的边界时刻列,所以先于捕获纪元的旧引用继续标为 racy —— 旧数据不会被「洗白」。
验证
npm run check→ syntax / version / bundle in sync- 数据一致性 34/34(新增
guard-deduped-content-keeps-per-reference-capture-time) - 阶段一门控 10/10、请求闸 9/9、存储 CLI 8/8、客户端 39/39
安装 / 更新
dsh plugin --profile desktop update github:daha1216/dsh-retrace --latest -w升级后需重启 DSH 桌面端。
v0.4.70 — 撤回与回退链路的安全重构
本次发布
从 v0.4.56 到 v0.4.70 共 14 个版本,主体是按《修复规划》推进的一轮系统性重构:把「撤回 / 编辑重发 / 重新生成 / 产物回退」这条链路上的数据安全、宿主契约、恢复正确性和客户端可靠性逐项补齐。
数据安全(工作包 C / D / I)
- 产物引用按会话分区:引用键从
v10:path改为session|<version>|path,两个会话的同名文件不再互相覆盖;/storage提供只读盘点。0.4.58 - 旧引用不猜测归属:0.4.58 之前的引用不带会话 id,迁移时一律冻结为「不可归属」,写入
legacy-frozen.json侧车,宁可不用也不张冠李戴。0.4.58/0.4.70 - 快照与回收事务化:同内容并发引用串行化、在途快照先结算再回收、捕获时机可疑的引用标
racy并拒绝用于回退、失败时补偿删除对象。0.4.59 - 只捕获启动后的新边界:新增
capture-epoch.json,历史重放不再按当前工作区字节「补拍」旧版本;迟到捕获一律标记为不可信。0.4.69 - 产物库启动自愈:启动时清理既无引用、磁盘上也没有对象的死元数据行(本机实测 608 行)。
0.4.70
宿主契约(工作包 B)
新增 lib/adapter/normalize.js 统一读契约:兼容两代 marker 信封(data.message.id 与 data.id)、按事件 seq 而非数组下标取事件(分叉/窗口化会话不再读错行)、unfold 与 doctor 按真实事件识别折叠、fold 边界改按 seq 计算。启动时探测宿主能力(snapshotEvents / surfaceNodes),缺失时自动降为只读。0.4.57
回退正确性(工作包 E)
- 回退票据:预览返回一次性
planId,绑定会话、版本、范围与当前版本号;执行时必须带票据,票据过期、复用或版本已前进都会被拒绝。0.4.60 - 上下文恢复不再假装成功:宿主没有正式恢复 API 时,无法复活的节点直接拒绝(
restore-unsupported),而不是写一条无效 marker。0.4.60 - 会话级 + 工作区级共享锁:同会话的撤回/编辑/回退串行,产物恢复再叠一层工作区锁,避免并发写同一批文件。
0.4.60 - 操作审计:每次回退在产物库里追加
operations.jsonl,只记录 id、范围与逐文件状态。0.4.60
安全边界(工作包 F)
- 只接受环回地址的 Host(需要远程访问时设
DSH_RETRACE_ALLOW_REMOTE=1)。0.4.61 - 写操作必须带
x-retrace-client: web头,跨站页面无法直接驱动撤回/回退。0.4.61 git init需要显式confirm,且沙箱策略取不到时直接失败(不再回退到部署默认策略)。0.4.61
性能与体验(工作包 G)
- 隐藏计划线性化:1000 行 / 100 标记的场景,节点访问从 112,200 次降到 3,300 次(2000/200 从 444,400 降到 6,600)。
0.4.62 - 跳转定位修复:改用宿主
loadThrough直接定位,不再依赖已不存在的snapshot.chat.nodes。0.4.62 - 回退弹层无障碍:
role="dialog"、aria-modal、Escape 关闭、焦点回到触发按钮;上下文不可复活、工作区有未提交改动时给出明确提示。0.4.63 - 图片回显绑定草稿:回显的图片绑定到当前草稿 revision,用户已换草稿时不会把旧图片塞进去。
0.4.63
构建与工具(工作包 H / I)
- 恢复
scripts/build-client.mjs与npm run check(语法 + 版本 + bundle 一致性),client.js与client.bundle.js不再靠手改维持同步。0.4.64 - 退役长期停更的
dynamic-client.js/dynamic-host.js(停在 0.4.43,缺请求闸与双确认)。0.4.64/0.4.66 - 新增
retrace store inventory | gc | migrate离线盘点与清理命令。0.4.65/0.4.68
升级须知
- 写接口新增客户端头:自带的 Web UI 会自动带
x-retrace-client: web;如果你用脚本直接调POST /api/plugins/retrace/*,需要手动加上这个头,否则返回 403。 - 能力默认值:
contextEdit、artifactCapture、artifactGc默认开启;contextRestore、artifactRestore默认关闭——宿主目前没有正式的上下文恢复 API,产物恢复仍在等完整受管清单,两项可用DSH_RETRACE_CAPABILITIES单独打开做试验。 - 存储键格式变化:升级后旧引用会被冻结(不删除对象,也不猜测归属),新版本只对 0.4.58 之后捕获的引用做回退。
- 首次启动会做一次清理:删除无引用且无对象的死元数据行,并在产物库根目录写
legacy-frozen.json。对象文件不会被删。 - 升级后需要重启 DSH 桌面端,插件才会加载新代码。
安装 / 更新
dsh plugin --profile desktop add github:daha1216/dsh-retrace更新到新版本:
dsh plugin --profile desktop update github:daha1216/dsh-retrace --latest -w验证
npm run check(语法 / 版本 / bundle 同步)与仓库自带的隔离测试全部通过:数据一致性 33/33、阶段一门控 10/10、请求闸 9/9、存储 CLI 8/8、客户端 39/39。
v0.4.56 — 会话短码不再写入标题
本次修复
会话短码只用于展示,不再写入标题(5a1c989)
此前 recall 短码会被一并写进会话标题,标题里出现一串无意义编码;现在短码仅作展示用途,标题保持干净。
关于这个 Release
本仓库此前只有 tag、没有 Release 页,v0.4.56 是第一个正式 Release。近期主要修复集中在:
- 深色模式视觉修复:失效令牌、开关令牌配对、按钮对比度、主题化阴影(0.4.55)
- 聊天区 action 对齐器的 measure/write 反馈循环(
f25b1a3) git init传入会话沙箱策略,修复.gitignore写入被拒(0.4.54)- 数据安全与体验审计问题的连续修复(0.4.50 – 0.4.53)
安装 / 更新
dsh plugin --profile desktop add github:daha1216/dsh-retrace更新到新版本:dsh plugin --profile desktop update github:daha1216/dsh-retrace --latest -w