802f06d59d
Agent Runner 在父 run 认领委派回执那一刻整进程消失,调用方只看到 connect 超时, runner 日志里两行 stderr 又被日志泵按「非诊断输出」抹掉。放开原始 stderr 后拿到 真相:thread 'tokio-rt-worker' has overflowed its stack。 Runtime 的 agent turn 调用链本来就深,task_queue 早就给自己起的后台线程配了 AGENT_RUNTIME_BACKGROUND_WORKER_STACK_BYTES;但静态委派的父 run 唤醒走的是 tauri::async_runtime::spawn,落在 Tauri 全局 runtime 的 worker 上——那个 runtime 由 TokioRuntime::new() 建出,worker 吃 tokio 默认栈(tokio 1.52 起该线程名就叫 tokio-rt-worker)。同一段代码在自家 16 MiB 线程上天天跑完整轮次,换到默认栈就爆, 所以不是无限递归,是那条链从来没被这个线程池的尺寸覆盖过。 进程入口在任何异步派发之前用同一个常量建 runtime 并 async_runtime::set 装上; handle 要求底层 Runtime 常驻,故刻意泄漏。这样十余处 async_runtime::spawn 一次 性都拿到同一份栈预算,而不是逐个改调用点。 回归用例在自建 runtime 上 spawn 一条 3 MiB 深的调用链。注意它的失败形态是整个 测试进程被 abort 而不是断言失败——已实测拿掉 thread_stack_size 后复现的正是线上 那行 tokio-rt-worker has overflowed its stack。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>