fix(background-notification): filter unsupported manager events
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,37 @@
|
|||||||
|
import { describe, expect, test, mock } from "bun:test"
|
||||||
|
|
||||||
|
import { createBackgroundNotificationHook } from "./hook"
|
||||||
|
|
||||||
|
describe("createBackgroundNotificationHook", () => {
|
||||||
|
test("#given unsupported event type #when event handler runs #then it does not forward to manager", async () => {
|
||||||
|
//#given
|
||||||
|
const handleEvent = mock(() => {})
|
||||||
|
const hook = createBackgroundNotificationHook({
|
||||||
|
handleEvent,
|
||||||
|
injectPendingNotificationsIntoChatMessage: () => {},
|
||||||
|
} as never)
|
||||||
|
|
||||||
|
//#when
|
||||||
|
await hook.event({ event: { type: "message.removed", properties: { sessionID: "ses-1" } } })
|
||||||
|
|
||||||
|
//#then
|
||||||
|
expect(handleEvent).not.toHaveBeenCalled()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("#given supported event type #when event handler runs #then it forwards to manager", async () => {
|
||||||
|
//#given
|
||||||
|
const handleEvent = mock(() => {})
|
||||||
|
const hook = createBackgroundNotificationHook({
|
||||||
|
handleEvent,
|
||||||
|
injectPendingNotificationsIntoChatMessage: () => {},
|
||||||
|
} as never)
|
||||||
|
|
||||||
|
const event = { type: "message.part.delta", properties: { sessionID: "ses-1", field: "text", delta: "x" } }
|
||||||
|
|
||||||
|
//#when
|
||||||
|
await hook.event({ event })
|
||||||
|
|
||||||
|
//#then
|
||||||
|
expect(handleEvent).toHaveBeenCalledWith(event)
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -17,6 +17,16 @@ interface ChatMessageOutput {
|
|||||||
parts: Array<{ type: string; text?: string; [key: string]: unknown }>
|
parts: Array<{ type: string; text?: string; [key: string]: unknown }>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const FORWARDED_EVENT_TYPES = new Set([
|
||||||
|
"message.updated",
|
||||||
|
"message.part.updated",
|
||||||
|
"message.part.delta",
|
||||||
|
"session.idle",
|
||||||
|
"session.error",
|
||||||
|
"session.deleted",
|
||||||
|
"session.status",
|
||||||
|
])
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Background notification hook - handles event routing to BackgroundManager.
|
* Background notification hook - handles event routing to BackgroundManager.
|
||||||
*
|
*
|
||||||
@@ -25,6 +35,7 @@ interface ChatMessageOutput {
|
|||||||
*/
|
*/
|
||||||
export function createBackgroundNotificationHook(manager: BackgroundManager) {
|
export function createBackgroundNotificationHook(manager: BackgroundManager) {
|
||||||
const eventHandler = async ({ event }: EventInput) => {
|
const eventHandler = async ({ event }: EventInput) => {
|
||||||
|
if (!FORWARDED_EVENT_TYPES.has(event.type)) return
|
||||||
manager.handleEvent(event)
|
manager.handleEvent(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user