fix(background-agent): queue notifications for idle parent sessions
When a background task completes and the parent session is waiting for user input, promptAsync() fails with an aborted error. Previously the notification was silently dropped — lost forever. Fix: queue the notification text in-memory on the BackgroundManager when promptAsync fails with an aborted/idle error. On the user's next message to that session, the queued notifications are injected into the chat context before the agent sees the message. - BackgroundManager: add pendingNotifications map + queuePendingNotification() and injectPendingNotificationsIntoChatMessage() methods - background-notification hook: add chat.message handler that calls injection - chat-message.ts: wire backgroundNotificationHook.chat.message into the message processing chain - Add tests covering queue-on-abort and next-message delivery
This commit is contained in:
@@ -9,6 +9,14 @@ interface EventInput {
|
||||
event: Event
|
||||
}
|
||||
|
||||
interface ChatMessageInput {
|
||||
sessionID: string
|
||||
}
|
||||
|
||||
interface ChatMessageOutput {
|
||||
parts: Array<{ type: string; text?: string; [key: string]: unknown }>
|
||||
}
|
||||
|
||||
/**
|
||||
* Background notification hook - handles event routing to BackgroundManager.
|
||||
*
|
||||
@@ -20,7 +28,15 @@ export function createBackgroundNotificationHook(manager: BackgroundManager) {
|
||||
manager.handleEvent(event)
|
||||
}
|
||||
|
||||
const chatMessageHandler = async (
|
||||
input: ChatMessageInput,
|
||||
output: ChatMessageOutput,
|
||||
): Promise<void> => {
|
||||
manager.injectPendingNotificationsIntoChatMessage(output, input.sessionID)
|
||||
}
|
||||
|
||||
return {
|
||||
"chat.message": chatMessageHandler,
|
||||
event: eventHandler,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user