Releases
v0.48.0
Compare
Sorry, something went wrong.
No results found
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 说明真实生效时机,宿主侧重组时序仍需宿主日志才能确认。
You can’t perform that action at this time.