jkooe
111a7b5918
feat(P0): UTF-8 全链路统一 + exec 输出结构化 + 受控重启(v7)
## P0-2 统一 UTF-8 编码链路
- util/exec.ts:Windows 侧注入 [Console]::OutputEncoding/ 为 UTF-8,
cmd 分支加 chcp 65001;并为子进程设置 PYTHONIOENCODING/LANG/LC_ALL。
- 根治三类事故:PowerShell 管道损坏中文(U+FFFD)、控制台 GBK 乱码。
- 真机验证:桌面文件名 [115浏览器.lnk / 360安全卫士.lnk] 由乱码变为正确中文。
## P0-4 exec 输出结构化
- CLI cmdExec:退出码/耗时等诊断信息改走 stderr,stdout 只保留命令自身输出。
- 使 不再被尾部标注污染(实测 stdout 仅 'ABC')。
## P0-3 受控重启(新增 system.agent.restart,能力数 19 -> 20)
- 先经历 4 种失败方案(均有真机证据):
1) 计划任务 + start node.exe -> Session 0 无桌面,start 拉不起进程
2) detached spawn + start /B -> cmd 退出即带走子进程
3) detached spawn + 直接跑 node -> detached cmd 随 agent 一起消失
4) 计划任务 action 直接跑 node -> 成功!但暴露环境变量传参 bug
- 最终方案:计划任务(ExecutionTimeLimit=0),action = cmd /c
「延时 -> taskkill 旧 PID -> 前台执行 node.exe」;Task Scheduler 持有 cmd,
cmd 持有 node,整条链与旧 agent 无关,且不依赖桌面会话。
- 关键坑:cmd 中 `set X=Y & cmd` 的 `&` 前空格会被计入变量值('Y '),
导致 agent 读不到配置回退默认端口 → EADDRINUSE。必须写成 `set X=Y& cmd`。
- 真机验证:节点 PID 31864 -> 22656,端口/能力/调用全部正常。
- 附带:Windows 用 ping 替代 timeout(后者在非交互环境报 Input redirection 不支持)。
CLI 新增 `nodeagent restart [--delay ms]`;unit 26/26、e2e 21/21 全绿。
2026-09-28 23:26:59 +08:00
..
2026-09-28 23:26:59 +08:00
2026-09-27 01:06:35 +08:00
2026-09-27 01:06:35 +08:00