v0.5.5
v0.5.5
修复本地一键启动在重启场景下必然 401 的死 token 问题。dsh-web.log 只追加不轮转,旧实例的 token 行会一直留在文件里,而 dsh web 每次重启都换 launch token;原实现对全量日志取最后一条 ?token= 行、找到即返回,点击时 web 已在跑(走重启路径)就会把上一实例的死 token 交给浏览器,新实例数秒后才打印自己的 token 行——401 必现。Windows 等无授权插件的原生 token 鉴权环境直接暴露,macOS 开发机因 web profile 装有授权插件、鉴权被整个旁路而死 token 也放行,问题被掩盖。
Changes
- token 解析绑定本次启动:
dsh_start_web在 spawn/restart 动作前记录日志字节锚点,解析只看锚点之后追加的区域(fresh_log_region)——重启后只认本次实例自己打印的 token 行,旧实例的死行永远进不了候选 - 兜底回退保持不变:新区域始终无 token 行(如 web 由外部手工启动、token 只落在终端)仍回退裸地址;锚点越界(日志被清空/轮转)按空区域处理,不再交出来历不明的旧行
- 重试窗口 10→20×500ms:打印与端口就绪先后无保证,加长窗口减少无谓的裸地址回退;拿到 token 行立即返回,正常路径无额外等待
- 新增区域绑定单元测试:新区域无 token 行时返回空、本次打印后只认新 token、锚点越界与多字节字符中间两个安全兜底
验证
cargo test:60 项全部通过(含新增区域绑定测试)cargo clippy --all-targets:无告警vitest:25 项全部通过pnpm run check:release -- --tag v0.5.5:版本三处一致、release notes 存在、bundle resources 路径有效
已知边界
- dsh 检测的
local_url(集成卡 Open/复制按钮)无启动锚点,web 被外部手段重启后仍可能给出死 token,后续以探测裁决或 dsh 侧查询端点解决 - 连续多次点击一键启动无并发互斥,互相顶掉刚拉起的实例(日志中 EADDRINUSE 假失败),后续单独处理