[P0/严重] TaskOrchestrator SubEngine 共享主 Engine 的 adapter 导致 abort signal 互斥覆盖 #4

Open
opened 2026-07-21 21:55:36 +08:00 by thzxx · 0 comments
Owner

问题类型

缺陷 / 严重 / Agent 引擎

文件位置

electron/harness/orchestration/orchestrator.ts

问题描述

TaskOrchestrator 委派子任务时,SubEngine 通过 mainEngine.getAdapter() 复用主 Engine 的 adapter 实例。
但 adapter 内部维护 currentAbortSignal,SubEngine 与主 Engine 都会调用 adapter.setAbortSignal()

  1. SubEngine 启动时覆盖主 Engine 的 signal
  2. SubEngine abort 后清除 signal,主 Engine 进行中的请求被意外中断
  3. 主 Engine abort 时会同时 abort SubEngine

影响

  • 委派任务与主流程互相干扰
  • 中断行为不可预测
  • 可能导致主会话永久卡死

建议修复

两种方案:

方案 A(推荐):为 SubEngine 创建独立的 adapter 实例(深拷贝配置)

const subAdapter = cloneAdapter(mainEngine.getAdapter());
const subEngine = new AgentLoopEngine(config, subAdapter, ...);

方案 B:adapter 改为 signal map(按 runId 索引),允许多个 signal 共存

方案 A 更简单且符合 isolation 原则。

## 问题类型 缺陷 / 严重 / Agent 引擎 ## 文件位置 `electron/harness/orchestration/orchestrator.ts` ## 问题描述 TaskOrchestrator 委派子任务时,SubEngine 通过 `mainEngine.getAdapter()` 复用主 Engine 的 adapter 实例。 但 adapter 内部维护 `currentAbortSignal`,SubEngine 与主 Engine 都会调用 `adapter.setAbortSignal()`: 1. SubEngine 启动时覆盖主 Engine 的 signal 2. SubEngine abort 后清除 signal,主 Engine 进行中的请求被意外中断 3. 主 Engine abort 时会同时 abort SubEngine ## 影响 - 委派任务与主流程互相干扰 - 中断行为不可预测 - 可能导致主会话永久卡死 ## 建议修复 两种方案: **方案 A(推荐)**:为 SubEngine 创建独立的 adapter 实例(深拷贝配置) ```ts const subAdapter = cloneAdapter(mainEngine.getAdapter()); const subEngine = new AgentLoopEngine(config, subAdapter, ...); ``` **方案 B**:adapter 改为 signal map(按 runId 索引),允许多个 signal 共存 方案 A 更简单且符合 isolation 原则。
thzxx added the Agent?????? labels 2026-07-21 21:55:36 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MetonaTeam/metona-ai-desktop#4