fn resolve_parent_agent<'a>(agent_id: &'a str, host_app: Option<&str>) -> &'a str {
match host_app {
Some("Claude Code") => "claude-code",
Some("Codex App") => "codex-app",
Some("Cursor") => "cursor-agent",
Some("VS Code") => "vscode-agent",
Some("VS Code / Cursor") => "vscode-agent",
Some("Windsurf") => "windsurf",
_ => agent_id,
}
}
pub fn generate_session_key(
agent_id: &str,
cwd: &str,
parent_pid: Option<u32>,
host_app: Option<&str>,
) -> String {
let resolved = resolve_parent_agent(agent_id, host_app);
if cwd.is_empty() {
format!("{}:pid:{}", resolved, parent_pid.unwrap_or(0))
} else {
format!("{}:{}", resolved, cwd)
}
}