Skip to content

Releases: daha1216/dsh-retrace

v0.4.77 — 回退可撤销,短码不再改写标题

Choose a tag to compare

@daha1216 daha1216 released this 25 Oct 12:38

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 — 去重内容不再被误判为不可信

Choose a tag to compare

@daha1216 daha1216 released this 25 Oct 04:34

修复

内容去重(同一份字节只存一次)会让多个边界共用一条元数据行,而这一行的 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 — 撤回与回退链路的安全重构

Choose a tag to compare

@daha1216 daha1216 released this 25 Oct 04:21

本次发布

从 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 — 会话短码不再写入标题

Choose a tag to compare

@daha1216 daha1216 released this 24 Oct 13:12

本次修复

会话短码只用于展示,不再写入标题(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