Announce 队列¶
子 agent 向父 session 推送通知的专用队列,带指数退避。
源文件:
src/agents/subagent-announce-queue.ts(306 行)
架构¶
sequenceDiagram
participant Sub as 子 Agent
participant AQ as AnnounceQueueState
participant Parent as 父 Session
Sub->>AQ: enqueue(announceItem)
AQ->>AQ: shouldDefer? (父 session 忙?)
alt 父 session 忙
AQ->>AQ: 等待 MAX_DEFER_WHILE_BUSY_MS (15s)
end
AQ->>Parent: send(item)
alt 发送失败
AQ->>AQ: consecutiveFailures++
AQ->>AQ: 指数退避 (最大 60s)
AQ->>Parent: 重试
end
核心数据结构¶
src/agents/subagent-announce-queue.ts L19-57:
export type AnnounceQueueItem = {
announceId?: string;
prompt: string;
summaryLine?: string;
internalEvents?: AgentInternalEvent[];
enqueuedAt: number;
sessionKey: string;
origin?: DeliveryContext;
sourceSessionKey?: string;
sourceChannel?: string;
sourceTool?: string;
};
type AnnounceQueueState = {
items: AnnounceQueueItem[];
draining: boolean;
lastEnqueuedAt: number;
mode: QueueMode;
debounceMs: number;
cap: number;
dropPolicy: QueueDropPolicy;
send: (item: AnnounceQueueItem) => Promise<void>;
shouldDefer?: (item: AnnounceQueueItem) => boolean;
consecutiveFailures: number; // 驱动指数退避
};
关键特性¶
- per-session 隔离:每个父 session 独立队列
- 延迟发送:
shouldDefer检查父 session 是否忙,最大等 15s - 指数退避:失败后退避重试,最大 60s
- 与 Followup 队列共享工具函数:
beginQueueDrain、waitForQueueDebounce等