diff --git a/CHANGELOG.md b/CHANGELOG.md index 7209534..a833370 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,39 @@ Quality Gate 的「依赖漏洞扫描(SCA)」在 `451d44a` 上为红,全 `pnpm-workspace.yaml`)—— 写在那里会被**静默忽略**,与「一直红所以等于没有」 是同一类失败形态,故覆盖项写在 workspace 文件里并注明原因。 +### 安全 —— 依赖漏洞彻底清零(中低危一并处理) + +在上一节之后复扫仍余 6 条(2 low / 4 moderate),全部经 MCP SDK 传递: + +- `hono <4.13.11`(serveStatic 路径二次解码绕过中间件)→ overrides `^4.13.14`; +- `ip-address <=10.7.3`(zone 标识符二次方耗时 DoS)→ overrides `^10.7.5`; +- `fast-uri <3.1.9`(scheme 伪造 / host 混淆 / 路径等价 4 条)→ overrides `^3.1.9`。 + +三条与 dependabot #3/#6/#7 同源,覆盖后那三个 PR 已无增量(随提交一并关闭)。 +当前 `pnpm audit` 输出 **No known vulnerabilities found**。 + +### 修复 —— 看门狗日志无界增长(常驻被控端,写满磁盘会拖死 agent) + +`startup-guard.log` 一直是 `appendFileSync` 无限追加。看门狗本身常驻被控端, +「坏版本 + supervisor 反复重启」时写得很快,磁盘满会连带把 agent 的审计写入拖死。 +现按 **1MB × 4 份**(当前 + `.1`…`.3`)轮换:超阈值先丢最旧、再逐个后移、当前滚为 `.1`。 +轮换与写入**双双失败静默** —— 日志问题绝不能反过来拦住被控端启动。 +判断逻辑放 `startup-guard-core.mjs` 纯函数(`shouldRotate` / `rotationTargets`), +并补 3 条单测(阈值边界含 NaN、命名序列、真实滚存三轮)。 + +### 修复 —— 控制台 L2 采集参数必须先出结果才出现 + +`AuditView.vue` 里「采集窗口 / 条数上限」两个输入框原先在 +`v-if="l2Rows.length"` 容器内 —— 用户想「先设 72 小时再采集」做不到,只能先按 +默认值点一次再改。参数与结果无生命周期关系,已拆出容器常显。 + +### 修复 —— e2e 连跑偶发失败(固定端口被上一轮残留占用) + +套件有 8 处 `spawn`,各自 `finally` 只发 `kill()`(SIGTERM)就 `process.exit`, +被控端可能来不及退出 → 下一轮固定端口仍被占,表现为「连跑第二次偶发失败,重跑又绿」。 +改为**包一层 spawn 统一登记**子进程(调用点零改动),进程退出时对存活者 `SIGKILL`; +单点收口,将来新增 spawn 也不会漏。实测连跑两次 34/34、退出后无残留 agent 进程。 + ## [2.1.0] - 2026-10-26 > 本段为 **v2.1.0** 定稿段(版本统一见 `a75c5c9`):selfupdate 代理出网、LKG 内容指针、 diff --git a/README.md b/README.md index 955c2ee..871e0c1 100644 --- a/README.md +++ b/README.md @@ -168,7 +168,7 @@ nodeagent --node win audit anchor --note "每日例行" # 追加一个锚点 > 真正发挥价值的前提:把锚点文件指向**另一台机器 / 网盘同步目录**。 > 本机文件被整盘重写时,锚点也随之消失 —— 那就等于没锚。 -**52 项能力** · **42 个 MCP 工具** · **477 项单元测试** · **50 项端到端用例**(34 通用 + 16 Windows 专属) · **23 项 Rust 壳单测**(真跑 Node sidecar)(CI 在真实 Windows / Linux runner 上验证) +**52 项能力** · **42 个 MCP 工具** · **480 项单元测试** · **50 项端到端用例**(34 通用 + 16 Windows 专属) · **23 项 Rust 壳单测**(真跑 Node sidecar)(CI 在真实 Windows / Linux runner 上验证) > 关键里程碑:**GUI 语义**(`window.list` + `screen.find`,UIA 找不到自动降级 OCR) > 让 AI 从「看得到画面但读不懂界面」变成「按名字取坐标点下去」。