@ -193,14 +193,26 @@ pub fn discover_sessions() -> crate::error::Result<Vec<SessionRef>> {
/// Discover all sub-agent runs for a session given the session's JSONL file path.
/// Discover all sub-agent runs for a session given the session's JSONL file path.
///
///
/// Looks for `subagents/agent-*.jsonl` files in the same directory as
/// The actual disk layout is:
/// `session_file`.
/// ```text
/// <project-dir>/
/// <session-uuid>.jsonl
/// <session-uuid>/ ← directory named after the UUID (no extension)
/// subagents/
/// agent-<id>.jsonl
/// ```
/// So we derive the sibling directory from the file stem and look inside it.
pub fn discover_agents_for_session ( session_file : & Path ) -> crate ::error ::Result < Vec < AgentRef > > {
pub fn discover_agents_for_session ( session_file : & Path ) -> crate ::error ::Result < Vec < AgentRef > > {
let parent = match session_file . parent ( ) {
let parent = match session_file . parent ( ) {
Some ( p ) = > p ,
Some ( p ) = > p ,
None = > return Ok ( vec! [ ] ) ,
None = > return Ok ( vec! [ ] ) ,
} ;
} ;
let subagents_dir = parent . join ( "subagents" ) ;
let stem = match session_file . file_stem ( ) {
Some ( s ) = > s ,
None = > return Ok ( vec! [ ] ) ,
} ;
let session_dir = parent . join ( stem ) ;
let subagents_dir = session_dir . join ( "subagents" ) ;
collect_agents_in_dir ( & subagents_dir , None )
collect_agents_in_dir ( & subagents_dir , None )
}
}
@ -249,7 +261,35 @@ pub fn discover_all_agents() -> crate::error::Result<Vec<AgentRef>> {
continue ;
continue ;
}
}
let subagents_dir = proj_path . join ( "subagents" ) ;
// Each project dir may contain zero or more <session-uuid>/ subdirectories.
// Each of those may have a `subagents/` directory inside it.
let session_dir_entries = match std ::fs ::read_dir ( & proj_path ) {
Ok ( e ) = > e ,
Err ( err ) = > {
eprintln! (
"claudbg: could not read {}: {}" ,
proj_path . display ( ) ,
err
) ;
continue ;
}
} ;
for session_dir_entry in session_dir_entries {
let session_dir_entry = match session_dir_entry {
Ok ( e ) = > e ,
Err ( err ) = > {
eprintln! ( "claudbg: error reading session dir entry: {err}" ) ;
continue ;
}
} ;
let session_dir_path = session_dir_entry . path ( ) ;
if ! session_dir_path . is_dir ( ) {
continue ;
}
let subagents_dir = session_dir_path . join ( "subagents" ) ;
match collect_agents_in_dir ( & subagents_dir , None ) {
match collect_agents_in_dir ( & subagents_dir , None ) {
Ok ( mut found ) = > agents . append ( & mut found ) ,
Ok ( mut found ) = > agents . append ( & mut found ) ,
Err ( err ) = > {
Err ( err ) = > {
@ -261,6 +301,7 @@ pub fn discover_all_agents() -> crate::error::Result<Vec<AgentRef>> {
}
}
}
}
}
}
}
Ok ( agents )
Ok ( agents )
}
}