Skip to content

Commit 47ef830

Browse files
Skip notifications for subagent sessions
1 parent c15e53f commit 47ef830

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

backend/src/services/notification.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ export class NotificationService {
200200

201201
const sessionId = event.properties.sessionID as string | undefined;
202202
if (sessionId && sseAggregator.isSessionBeingViewed(sessionId)) return;
203+
if (sessionId && sseAggregator.isSubagentSession(sessionId)) return;
203204

204205
if (!this.isConfigured()) return;
205206

backend/src/services/sse-aggregator.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class SSEAggregator {
3737
private idleTimeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()
3838
private sessionStateVersion: Map<string, number> = new Map()
3939
private eventListeners: Set<SSEEventListener> = new Set()
40+
private subagentSessions: Map<string, Set<string>> = new Map()
4041

4142
private constructor() {}
4243

@@ -246,6 +247,27 @@ class SSEAggregator {
246247
if (sessionID) {
247248
this.markSessionIdle(directory, sessionID)
248249
}
250+
} else if (type === 'session.created' || type === 'session.updated') {
251+
const info = properties.info as { id?: string; parentID?: string } | undefined
252+
if (info?.id && info.parentID) {
253+
let sessions = this.subagentSessions.get(directory)
254+
if (!sessions) {
255+
sessions = new Set()
256+
this.subagentSessions.set(directory, sessions)
257+
}
258+
sessions.add(info.id)
259+
}
260+
} else if (type === 'session.deleted') {
261+
const info = properties.info as { id?: string } | undefined
262+
if (info?.id) {
263+
const sessions = this.subagentSessions.get(directory)
264+
if (sessions) {
265+
sessions.delete(info.id)
266+
if (sessions.size === 0) {
267+
this.subagentSessions.delete(directory)
268+
}
269+
}
270+
}
249271
}
250272
}
251273

@@ -375,6 +397,15 @@ class SSEAggregator {
375397
return false
376398
}
377399

400+
isSubagentSession(sessionId: string): boolean {
401+
for (const sessions of this.subagentSessions.values()) {
402+
if (sessions.has(sessionId)) {
403+
return true
404+
}
405+
}
406+
return false
407+
}
408+
378409
getActiveDirectories(): string[] {
379410
return Array.from(this.connections.keys())
380411
}
@@ -385,6 +416,7 @@ class SSEAggregator {
385416
})
386417
this.idleTimeouts.clear()
387418
this.activeSessions.clear()
419+
this.subagentSessions.clear()
388420
this.sessionStateVersion.clear()
389421

390422
this.connections.forEach((conn, dir) => {

0 commit comments

Comments
 (0)