@@ -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