Skip to content

Releases: msilita/dsh-graceful-restart

v0.3.0

Choose a tag to compare

@msilita msilita released this 16 Aug 06:07

v0.3.0 — 启动守护重构为纯指针模型

🎯 核心变更

快照系统重构(纯指针模型)

  • 唯一指针 current(时间戳键值)指向按时间排序的快照链中当前生效版本
  • 启动扫描:实际插件清单 vs current 指向快照求差集
    • 差集为空 → 不变化
    • 差集非空 → 先删除比 current 新的条目(回滚遗留),再新建快照,指针前移
  • 正常启动 → 不再操作快照(只清 stderr log、追加日志)

错误独立记录

  • 启动失败不再记在快照条目上,独立 errors 数组(只保留最新一条;历史错误完整保留在 dsh-graceful-restart.log
  • 视图错误区改为黑底终端风格:完整 stderr(滚动条)+ 复制按钮

无限逐级回滚(移除回滚上限)

  • 失败时 current更早移一条(不修改快照链)→ 对差集做完整逆操作 → 重试
  • 逆操作双向处理:新增卸载 / 被删装回 / 版本变化恢复基线版本pkg@spec 格式)
  • 循环直到成功或没有更早快照

独立 stderr 捕获

  • 每次启动尝试独立文件 dsh-graceful-restart-stderr-<时间戳>.log
  • 失败时全量读取(不截断、不累积多次失败内容),随错误记录移交第二代展示与唤醒

🐛 修复

  • stdio[2] 误写 inherit 导致 child.stderr 为 null(spawn 后注册中断)→ 改 pipe
  • 入列 dup 误判(全历史 vs HEAD)与键序敏感比较 → [当前] 同行
  • 快照链重复状态 → "无变化"条目与回滚白跳

📦 升级

dsh plugin --profile web remove dsh-graceful-restart
dsh plugin --profile web add dsh-graceful-restart

然后完整重启(dsh web)。旧格式快照自动迁移(条目内 error → errors 数组,current 对象 → 时间戳键值)。

✅ 实测验证

  • 正常启动:差集空不变化 / 装包差集非空建新快照
  • 装坏包 → 自动回滚 → 恢复(唤醒消息带完整错误)
  • 双插件同时装 → 失败后一起卸载
  • 卸边栏+装坏包 → 逆操作同时卸载坏包 + 装回边栏(removed→add)
  • stderr 单份完整堆栈(多次失败不合并)

v0.2.2

Choose a tag to compare

@msilita msilita released this 15 Aug 15:31

重启病历:启动失败/回滚/放弃记录进唤醒 marker,恢复后作为消息前缀发给 agent(醒来即知发生了什么)。端到端实测:装坏插件 → 探测 404 → 自动回滚 → 唤醒消息带完整重启过程记录。

v0.2.1

Choose a tag to compare

@msilita msilita released this 15 Aug 15:06

守护增强:客户端探测——新增插件的 client bundle 404/不可用视为页面级启动失败,自动回滚(覆盖 host 正常但页面加载失败的半失败场景)。端到端实测:dsh-waker 装坏后自动回滚恢复。

v0.2.0

Choose a tag to compare

@msilita msilita released this 15 Aug 14:28

DSH 优雅重启 / 关闭 / 启动守护插件。

  • 自动套壳:启动方式不变(dsh web),第一代隐形 launcher + 正式实例
  • 优雅重启(等轮次结束)+ 唤醒智能体继续(continuePrompt 优先级:工具参数 > settings)
  • shutdown / cancel_harness_action 撤销安排
  • 启动守护:多版本成功基线(snapshotKeep 可调)、失败自动回滚新增插件(官方 CLI)、逐级回溯
  • 页面自动刷新:代际 ID(startedAt)+ localStorage 持久化对比,无轮询
  • 设置菜单:快照保留版本数