Skip to content

最新版本evolver让agent启动会持续cmd弹窗闪退 #528

@desmonna

Description

@desmonna

Summary

拉去最新版本后,发现自行后台终端(powershell7.6)启动无影响,让agent操作进行任务领取/资源发布/购买资产的能操作就会杀掉终端后台进程,同时不停弹窗。即使后台不启动,仅让agent启动也会不停弹窗

Steps to reproduce / task

  1. 项目根目录下powershell终端启动evolver --loop(不启动也可)
  2. 告诉agent,让其分析并运行evolver相关命令,开始出现cmd弹窗

Acceptance criteria

不再弹窗,另外如果检测到已有终端运行,是否可以类似subagent一样执行命令发送结果即可,不主动杀掉进程

Notes

我让agent分析后得出结论:

两个问题的根因分析
问题1:你后台运行 evolver --loop,我执行命令时后台任务会断
根因:文件锁竞争。evolver daemon 使用文件锁(.evolver.lock)保证单实例。当我执行 evolver buy、evolver publish 等子命令时,它们也会尝试获取同一个锁,导致:

你的 daemon 检测到锁冲突 → 释放锁等待
或者我的子命令获取锁后,daemon 的下一轮循环因锁失败而退出
问题2:我启动 evolver 后反复弹窗
根因:自杀重启机制 + 新进程用 detached: true,在 Windows 上会弹出新控制台窗口(index.js:454-475)
windowsHide: true 在 detached 模式下对 Windows 无效

触发条件(默认值):
  EVOLVER_SUICIDE          = true(默认开启)
  EVOLVER_MAX_CYCLES       = 100 轮
  EVOLVER_MAX_RSS_MB       = 500 MB
当 daemon 跑满 100 轮循环或内存超 500MB 时,触发自重启:

const child = spawn(process.execPath, [__filename, ...args], {
    detached: true,       // 创建新进程组 → Windows 分配新控制台窗口
    windowsHide: true,    // 试图隐藏,但 detached 模式下在 Windows 上不完全生效
    stdio: ['ignore', logFd, logFd],
});
detached: true 在 Windows 上创建独立进程组,会弹出新 conhost 窗口。 windowsHide 只对非 detached 的子进程有效。这就是为什么:
你在 pwsh 前台运行:suicide 重启时新进程继承当前控制台,不弹新窗口
我用 Python subprocess 启动:初始进程隐在 Python 子进程里,但 suicide 重启后的新 detached 进程会弹出一个新 cmd 窗口 → 无限循环弹窗

## 两个问题合一
|场景 | 你运行 | 我运行|
|-- | -- | --|
|初始进程 | 在你的pwsh控制台内,不弹窗 | 在Python子进程内,不弹窗|
|suicide重启后 | 继承原控制台,不弹窗 | detached新进程 → 弹窗循环|
|我执行子命令 | 文件锁竞争 → 你的daemon可能断 | —|

解决方案

在 .env 中禁用自杀重启机制
EVOLVER_SUICIDE=false

测试结果

项目 结果
daemon PID 25480 测试前 ✅ 存活
evolver orders 执行 ✅ 输出正常("No orders found for role=consumer")
daemon PID 25480 测试后 仍然存活,未被打断
弹窗 无弹窗

有个小瑕疵:orders 命令退出码 3221226505(Windows heap corruption),stderr 出现 Assertion failed: !(handle->flags & UV_HANDLE_CLOSING)——这是 libuv 的已知 Windows bug,只影响子命令退出时的清理,不影响 daemon 和实际功能。
**结论:EVOLVER_SUICIDE=false 修复生效。我执行子命令不再打断你的 daemon,也不弹窗了。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions