Skip to content

v0.5.3 preview

Pre-release
Pre-release

Choose a tag to compare

@wangtheme-coder wangtheme-coder released this 18 Oct 12:23
· 4 commits to main since this 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/inspect 2–7 ms,tree 约 134 ms。
    • 真实 DSH 会话(重启后,客户录入器窗口,同场景 5 次):key 648–720 ms(均值约 683 ms),0.5.2 同期是 2911–2967 ms;a11y 281 ms(0.5.2 是 828 ms),set_element_value 312 ms,click_element 369 ms,windows 170–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-session 5 项、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)。