Skip to content

v1.3.7 — 草稿保全、队列诚实与保存回滚

Latest

Choose a tag to compare

@cullysu cullysu released this 17 Oct 17:48

v1.3.7 — 草稿保全、队列诚实与保存回滚

来自独立 v1.3.6 审查的全部 5 项修复(2 个 P2 + 3 个 P3),主题是**「失败时的诚实」**:打开失败不吞草稿、离线队列不丢用户输入、保存失败不假装成功。

修复

P2-1 被拒绝的打开不再吃掉输入框草稿

  • 输入框内容只在「不可回退点」(tab id 在线上确认)之后才清空——以前是先清空再等打开结果,打开被服务器拒绝时草稿就没了。
  • open-denied 帧现在会拒绝挂起的打开 Promise(reject 函数通过 state._openReject 让 WS 处理器可达,另有 21 秒兜底防丢帧),submitPrompt 捕获后在状态行提示「会话打开失败:…——输入框内容已保留」,草稿与待发附件原样保留。

P2-2 离线队列停止丢弃用户回合

  • 200 帧上限只丢「刷新类」RPC(get_state / get_entries / get_available_models / get_available_thinking_levels)——它们的答案在冲刷那一刻就过时了。
  • 队列里没有可丢帧时,新发送被显式拒绝,状态行指明是哪种操作(「『prompt』未能入队,连接恢复后请重试」),不再静默丢弃 open/prompt/close/set_model/adopt。

P3-3 设默认模型检查后端应答

  • 两处 set-default 都先检查 /api/config 的 ack 再更新 cfg/chip——以前服务器 500 时乐观 UI 照样更新。

P3-4 Provider 保存的部分提交回滚

  • 保存改在 modelsDoc 的克隆上进行(POST 前的就地修改不再在保存被拒后残留在内存里);
  • models→routing→config 序列中途失败时,通过新增的 reloadConfigState() 从磁盘重拉三份文档,内存与磁盘对齐。

P3-5 collectProc 上限变严格

  • 每个 stdout/stderr chunk 在接收时就按剩余上限切片,close 路径再截断一次——以前单个超大 chunk(5000 字符 vs 200 上限)会整块漏过。

契约测试

  • scripts/verify-audit-fixes.mjs 新增 5 条 wave-26 断言(composer 清空时序、open-denied 拒绝接线、队列策略、ack 检查 + 克隆/重载、chunk 级上限)。

校验

  • 提交 ae72326;CI 8/8(run 39041566547);全部 7 个版本文件 = 1.3.7。