Skip to content

v0.48.0 — 工具面开关改为重启生效

Latest

Choose a tag to compare

@KannaKuron KannaKuron released this 01 Nov 18:57

fix:工具面开关改为「重启生效」——不再在存活会话上重建工具面

  • 背景(真机事故):在设置卡把 pwshTool 关掉的同一条消息之后,正在运行的会话工具面被清空——
    request/header.tools 从 59 个掉到 31 个,丢掉的 29 个正是官方 preset 的工具
    (read/write/edit/glob/grep/bash/gitbash_native/pwsh/web_search/web_fetch/
    todo_write/exit_plan_mode/schedule_*/skill/present 等),只剩 profile 级插件工具;
    重启 DSH 后恢复。环境:dsh 0.2.1-rc.5 + 本插件 0.47.2,win32 真机。
  • 插件侧成因:pwshTool/experimentalNative 是 volatile 字段,宿主把编辑实时交给运行中的行;
    本插件在 loader/volatile-update 上对每个存活 agent 重跑 reconcile(),而 reconcile()
    会先解除自己的 pwsh mask 再读工具面——这次读取与宿主重组的时序不保证稳定,既可能把「face 不含 pwsh」
    误判成「preset mask 接管」而撤掉自己注册的 bash,也让一次纯展示开关的改动触发工具面重建。
  • 改动:
    • 每个 agent 在首次观测时快照 { pwshVisible, experimental },此后一律按快照判定,不再读 live 开关;
    • loader/volatile-update 命中这两个开关时只写一行日志
      (tool-face switch changed (pwshTool): running agents keep their tool face; ...),
      不再重建任何存活 agent 的工具面;
    • tools/pre-execute 的 pwsh 拒绝判定跟随该 agent 的快照(保留 deps.pwshEnabled?.() !== true 字面量);
      ensureNativeSlot / nativeWanted 也改为按快照的 experimental 创建/保留 native 槽,不再被 live 开关中途撤掉;
    • 设置卡只给 pwshTool / experimentalNative 两个开关加「工具面可见性需重启」的中英提示
      (variantPresets / fastctxTools 维持原语义);experimentalNative 的原生工具执行门禁仍按当前开关立即生效。
  • 行为契约变化:这两个开关的工具面可见性/注册不再对已存在会话生效,新会话或重启后应用新值;
    执行门禁仍可立即生效。README 原写「切换 pwshTool 会改 bash description、一次性作废缓存」,
    现改为「工具面保存后需重启」,不再发生中途的工具面重建。
  • 测试(346 项:345 pass + 1 平台 skip):runtime-regressions 的「活体跟随两次翻转」改为「冻结 + 只记日志」,
    并新增「翻转只对 NEW agent 生效」用例(fixture 的 mask 改为 per-agent);macOS 全量通过,PR 作者在
    Windows 0.2.1-rc.5 真机复验原补丁。本次合入后的补丁未再上 Windows,Windows 侧仍需按 #38 的
    request/header 方法复验一次。
  • 未覆盖:没能定位宿主侧「preset 工具整批消失」的完整链路(丢掉的 29 个工具超出本插件可影响的
    范围);本改动消除插件侧触发点并让 UI 说明真实生效时机,宿主侧重组时序仍需宿主日志才能确认。