Repository navigation
v0.2.0 — 墓碑非空化 + migrate 动作 + 空内容兜底
修复一个真 bug(用户发现):墓碑原先写 \content: []\,在不跳过空 user 消息的 provider 上,整条请求被打回 400 \message content cannot be empty\ —— 表现为「换模型就报错」。DeepSeek 自家路由会跳过空消息,所以只在换 provider/模型时暴露。实测 SenseAudio(deepseek-v4.1-flash)捕获到 400。
三层防御:
- 墓碑非空化:占位文本「[已撤回]」。它不会出现在对话里(surface 替换节点不是 append-surface 事件),遮蔽也从不依赖它。
- 新增 \migrate\ 维护动作:把会话里残留的旧空墓碑替换成带占位符的新墓碑,保留原
emoved\ 列表,客户端遮蔽推导不变。并且每次操作都顺带执行 —— 旧会话第一次被碰到就自愈。幂等。 - \�gent/pre-step\ 兜底:任何请求发出前,空 user 消息(空数组/空串/纯空 text 块)一律补占位文本 —— 连别的 producer 写的空消息也兜住。
另外:包名改为 @kyle123740/dsh-message-recall\(npm 上裸名 \dsh-message-recall\ 属于无关发布者,裸名发布不了);\inspect\ 新增 \legacy\ 标记;已对照 0.2.0-rc.1 桌面壳的内置核心验证兼容(格式仍 v4,surfaceOp 契约不变)。