Repository navigation
v0.5.3 preview
Pre-release
Pre-release
0.5.3 preview — 2026-10-18
- 原生命令常驻:
DragonNative.exe与A11yProbe.exe改成同一进程内逐行收发请求(native-session.mjs),不再每次动作都新起 8–10 个进程。A11yProbe.cs增加请求循环与{id, ok, value|error}信封,旧版一次性调用(不带id)仍然返回原格式,所以升级途中新旧代码可以共存。 - 常驻进程的边界条件都写在
native-session.mjs里并有测试:请求按序排队、响应按id匹配、单请求 12 s(UIA 6 s)超时、取消或超时直接杀掉进程(不能让可能还在输入的原生进程继续跑)、原生报错不弄死进程、空闲 60 s 自动退出、父进程结束即随 stdin EOF 退出、插件卸载时统一关闭。 - 校验一处没减:窗口身份、坐标、观察号过期、Esc 急停规则全部保留;省掉的是重复的进程启动和通信,不是核验。
- 实测(同机、同一套动作、单步
key):- 插件层(
scripts/profile-action.mjs,真实窗口 + 真实权限守卫):1889 ms → 301 ms;其中守卫从每段约 386 ms 降到 13 ms,执行段 1111 ms → 279 ms。 - 原生单次:冷启 96–100 ms,同进程后续
foreground/inspect2–7 ms,tree约 134 ms。 - 真实 DSH 会话(重启后,客户录入器窗口,同场景 5 次):
key648–720 ms(均值约 683 ms),0.5.2 同期是 2911–2967 ms;a11y281 ms(0.5.2 是 828 ms),set_element_value312 ms,click_element369 ms,windows170–259 ms,observe(截图)1186 ms(0.5.2 是 2184 ms,省下的是不再重复起进程)。 observe剩下的 1.1 秒是 PNG 编码 + base64 传输,不属于本次优化范围。
- 插件层(
- 审计日志的
end记录新增timings(guard/execute/render/image/after各段毫秒数,不含参数),方便下一次在真实会话里核对宿主层开销。 batch的观察号补全:首步省略observation_id时沿用工具层那一个,后续步省略等同于previous。之前首步不带 id 会直接报「观察已过期」,把工具层的 id 白给了。- 抢焦点不再被当成新目标:输入动作结束后如果前台已经不是本轮目标窗口,立刻报
DRAGON_FOREGROUND_CHANGED并清掉观察,后续步骤一律停下,不会再像以前那样把抢到焦点的窗口当成下一次输入的目标。type在「点下去 → 开始打字」这 60 ms 缝隙里也补了一次前台核对,前台不对就一个字都不发。主动切换窗口(focus_window/ 重新observe)不受影响。代价是每次type多一次foreground查询(常驻进程内 2–7 ms)。 - 同一任务端到端复测(客户录入器 5 条 + 导出 + 报告 + 三端核对,同一台机器):界面操作 5 分 01 秒 → 2 分 11 秒,全流程 16 分 01 秒 → 2 分 39 秒,仍 40/40 通过;做法改成「一条记录一次 batch + 保存前 a11y 回读」。
- 回归测试 80 项通过(新增
native-session5 项、batch默认观察号 1 项、抢焦点 2 项)。 - 守卫失败也带专用错误码:过期记
DRAGON_OBSERVATION_STALE,窗口变化记DRAGON_WINDOW_CHANGED(原来只有一句中文、审计里归成DRAGON_ACTION_FAILED);分段timings在阶段抛错时也会记录耗时。 - 重启后实测(客户录入器,20:2x):
- batch 只给工具层观察号、两步都不写
id:跑通,文字正确落在「客户名称」,回读验证测试后清空; - 用置顶遮挡窗压住「客户名称」再
type:报DRAGON_FOREGROUND_CHANGED,遮挡窗输入框和目标字段都没收到文字,审计里该次记录timings.guard=420 ms; - 最小化目标窗口后
type:被拒(当时记DRAGON_ACTION_FAILED,新版记DRAGON_WINDOW_CHANGED)。
- batch 只给工具层观察号、两步都不写