## 问题(皇上指出) 项目里两套编号并行,无法判断哪个是"当前版本": - **发布版本**(semver):v1.1.0 ~ v1.6.0、v2.0.0 - **开发批次代号**:v1 ~ v26(README 路线表 / 代码注释 / 文档) 时间线证据:v1.1.0 首发(09-29)时批次已推进到 v12.4 —— **二者从来不是一对一**(26 批次只发过 10 版)。 ## 规则(新增 docs/VERSIONING.md §0 版本号唯一性规范) - **唯一版本号 = semver `vX.Y.Z`**,两个来源必须永远一致:git tag 与 package.json(构建期注入 agent) - **批次代号不是版本号**,不再单独出现;需要区分同版内多批改动时用**功能名** - 附「批次 → 归属发布版本」映射表(按 tag 时间线与功能内容推定,并注明以 CHANGELOG 为准) ## 统一动作 1. **批次 v23 ~ v26 → v2.0.0**(22 文件 / 53 处)—— 它们确实属于 v2.0.0 2. **臣的批次号 v1.7 / v1.8 → v2.0.0**(27 文件)—— 未单独发版 3. **简写补全三段式**:v1.5 → v1.5.0、v1.6 → v1.6.0 4. **README 路线表**:`**v1**` → `**批次 1**`;表头加「批次 ≠ 版本号」说明并链到 §0; 补齐批次 16~29 与 **v2.0.0 发布行**;删掉过时的「待办」行(提到的分支早已删除) 5. `docs/VERSIONING.md` 里**故意保留** 3 处批次号 —— 那是规范说明本身 ## 保留项(真实发布版本,不动) v1.1.0 / v1.2.1 / v1.3.0 / v1.4.0~v1.4.3 / v1.5.0 / v1.6.0 / v2.0.0(10 个 tag) ## 验证 - 版本号一致性:package.json = tag = 8 个 workspace = tauri.conf.json = **2.0.0** ✓ - v1.7/v1.8/v23~v26 全仓残留 **3 处**(均在 VERSIONING.md 规范说明中,属预期) - 7 包构建 · 单测 273 · e2e 30 · ps1-encoding 24 全绿
7.2 KiB
7.2 KiB
变更日志
本文件记录 nodeagent 的显著变更。格式参考 Keep a Changelog, 版本号遵循 语义化版本。
[v2.0.0] —— 2026-10-10
自
v1.6.0起累计 37 个提交。能力数 43 → 51,单测 195 → 273,端到端 30。 之所以直接跳 v2.0.0:两个新方向(语义可断言 / 状态可回看)+ 安全批次四连 + 五处 只有真机能暴露的严重缺陷修复,量级远超一次 MINOR。兼容性:完全向后兼容 —— 未改任何既有能力的参数名或语义,未新增必填参数, 返回结构只增不减(遵循
docs/VERSIONING.md的四条铁律)。已知限制:本版发布时被控端整机离线,
v1.5.0的预设别名/长按/后台投递/热键序列 与v2.0.0的自重启任务清理策略尚未经真机验证(后者已在本地单测锁定判定条件)。
新增:语义可断言(v1.6.0 / v2.0.0)
gui.await—— 等条件成立再返回。四类条件(window/control/process/file) × 两种状态(present/absent),复用既有能力,零新增平台探测代码。 超时是正常返回(satisfied:false+note),不抛异常;轮询期单次异常不视为失败。screen.find返回 UIA 属性 ——enabled/value/selected/toggle。 每项单独 try/catch,拿不到就留null绝不猜(Electron、游戏 UI 常给不出值)。where属性谓词 —— 如{"enabled":true}「等一个可用的按钮」, 比「等一个叫某名字的按钮」更贴近真实意图。仅 UIA 引擎生效, OCR/图像引擎会忽略并带回note,不让调用方误以为过滤过了。any_of组合 —— 任一命中即算,命中时回报是哪个子条件。 例:[{window:"安装完成"},{control:"错误"}]= 「装成功或报错,先出现的算」。- CLI:
nodeagent await;MCP:na_await。
新增:状态可回看(v2.0.0)
log.query—— 日志在被控端侧过滤后只回匹配行(pattern/level/since/offset/limit/tail)。流式逐行读,几万行日志也不整份拉回。monitor.start/report/stop/list/delete—— 定时采样并落盘。 四类源:port(连通性 + 延迟)/process(存活 + PID)/command(退出码 + 首行)/metric(CPU·内存)。摘要直接给结论:断了几次、最长断多久、值域。- CLI:
nodeagent monitor/log;MCP:na_monitor/na_log。
新增:安全加固(v2.0.0)
- 连接层三防护:
- 握手失败封禁 —— 连续失败达阈值 → 指数退避(封顶 24h),成功即清零,支持白名单豁免
- 连接上限(默认 8)+ 空闲断开(默认 30 分钟;有任务或订阅在跑时保守不踢)
- 状态从
WeakMap改Map(需要 size 与遍历),关闭时手动清理
- 安装期密钥改 stdin ——
install.cmd用管道喂-KeyFromStdin,密钥不再出现在命令行 (同机其他用户无法从进程命令行读到)。 - 零信任优先安装 —— 侦测到
client-acl.json(含控制端公钥)即走ed25519并写入acl.default_effect="deny";否则保持psk但输出醒目安全告警(说明client_id自报的固有风险 + 三步切换指引)。 - 审计链外部锚定 ——
system.audit.head(链头可读)+system.audit.anchor(锚点追加落盘)。 锚点记四元组{entries, head_hash, head_ts, rotated_segments}:只记哈希会把日志轮转 误判成篡改。锚点文件只追加 —— 可覆盖的话,攻击者重写链后再刷新锚点即可抹痕。
修复(五处只有真机能暴露的严重缺陷)
install.cmd双击首装即炸 ——for /f调 PowerShell 时^|转义漏进 PS,导致 ParseError。真实用户第一次安装必然踩到(PSK.txt 已不在分发包内)。pack.mjs三连 ——spawn node_modules/.bin/esbuild在 pnpm 布局下 ENOENT; 以及zip/ls -la/du -sh在 Windows 上都不存在。已改为 esbuild JS API + 平台分流(Windows 用Compress-Archive)+ Node 原生 API。where的 PowerShell 注入语法错 —— 连修两轮:JSON 字面量 ✗ →\"反斜杠转义 ✗ (PS 5.1 不认)→ PS 单引号字面量 ✓。症状是「带 where 一律窗口操作失败,不带则正常」。screen.find的 where-only 被自己入口校验拦下 —— 只改了一半(gui.await侧放开、screen.find侧没动)。parseLeadingTs吃掉 ISO 的Z时区标记 —— UTC 被当本地时间解析,整体偏 8 小时, 跨时区日志判断「何时断的」会错(单测抓到)。
修复(其他)
- 自重启在非管理员身份下失败 ——
-RunLevel Highest被系统拒绝(v7 起的既有缺陷)。 现改为两级降级:先试 Highest,失败则不指定 Principal(继承当前权限级别)。 修复后deploy首次能一次走通完整闭环。 deploy备份无限堆积 ——.bak-<时间戳>→ 固定名.bak+ 清理历史(真机 17 → 2 个文件)。- 自重启任务 Running 僵尸 —— 清理条件加「
LastRunTime早于 1 小时」余量 (不能简单清所有 Running:那会连当前 agent 的宿主一起杀)。 - Windows CI 四连:
URL.pathname跨平台路径、shell: cmd套多行 PowerShell、 5.1 执行的内联脚本含中文、产物包断言方向反了(PSK.txt从「必含」改「不得含」)。
安全 / 隐私
- 源码与测试里的真机常量脱敏(机器名、内网地址)—— 保留「为什么」的教训,去掉具体实况。
- 能力调用新增审计类型
session.idle_close。
文档
README能力总览补三行、数字同步至 51 项能力 / 41 个 MCP 工具 / 269 单测。- 新增章节:
gui.await属性谓词与组合、状态采样、审计链外部锚定。 docs/SECURITY.md新增 §4.7(零信任优先安装)/ §4.8(审计锚定), §5「还没做的」清单至此全部完成。docs/DEVELOPMENT.md能力表补全(此前停在 19 项)。docs/RETROSPECTIVE.md加「短板已全部解决」对照表(保留原判断不改写)。docs/ROADMAP.md台账刷新,并新增「真机验证抓到的 8 个真 bug」表。
[v1.6.0] —— 2026-10-07
新增
gui.await等待条件能力(第 43 项)。
说明
- 本版未经真机验证即发布(当时被控端离线);相关验证已于 2026-10-09 ~ 10-10 补齐。
[v1.5.0] —— 2026-10-07
新增
input.key.press参数面扩展:字符串热键(hotkey: "ctrl+shift+esc")、约 50 个预设别名、 长按hold_ms、后台定向投递route=post+target_pid。- 按键表补齐:左右侧修饰键、小键盘(与数字键分开)、OEM 符号键(解锁
win+d/ctrl++/win+.)、IME 键、浏览器键、系统键。
说明
- 本版同样未经真机验证即发布;2026-10-10 已验证字符串热键与单键投递,其余项待被控端在线后补齐。