mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-08-04 11:43:57 +08:00
fix(session): hide Codex subagent sessions (#2445)
This commit is contained in:
@@ -143,6 +143,9 @@ fn parse_session(path: &Path) -> Option<SessionMeta> {
|
|||||||
}
|
}
|
||||||
if value.get("type").and_then(Value::as_str) == Some("session_meta") {
|
if value.get("type").and_then(Value::as_str) == Some("session_meta") {
|
||||||
if let Some(payload) = value.get("payload") {
|
if let Some(payload) = value.get("payload") {
|
||||||
|
if is_subagent_source(payload.get("source")) {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
if session_id.is_none() {
|
if session_id.is_none() {
|
||||||
session_id = payload
|
session_id = payload
|
||||||
.get("id")
|
.get("id")
|
||||||
@@ -239,6 +242,13 @@ fn parse_session(path: &Path) -> Option<SessionMeta> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_subagent_source(source: Option<&Value>) -> bool {
|
||||||
|
source
|
||||||
|
.and_then(|value| value.as_object())
|
||||||
|
.map(|source| source.contains_key("subagent"))
|
||||||
|
.unwrap_or(false)
|
||||||
|
}
|
||||||
|
|
||||||
fn infer_session_id_from_filename(path: &Path) -> Option<String> {
|
fn infer_session_id_from_filename(path: &Path) -> Option<String> {
|
||||||
let file_name = path.file_name()?.to_string_lossy();
|
let file_name = path.file_name()?.to_string_lossy();
|
||||||
UUID_RE.find(&file_name).map(|mat| mat.as_str().to_string())
|
UUID_RE.find(&file_name).map(|mat| mat.as_str().to_string())
|
||||||
@@ -328,6 +338,22 @@ mod tests {
|
|||||||
assert_eq!(meta.title.as_deref(), Some("Fix the login bug"));
|
assert_eq!(meta.title.as_deref(), Some("Fix the login bug"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_session_skips_subagent_sessions() {
|
||||||
|
let temp = tempdir().expect("tempdir");
|
||||||
|
let path = temp.path().join("session.jsonl");
|
||||||
|
std::fs::write(
|
||||||
|
&path,
|
||||||
|
concat!(
|
||||||
|
"{\"timestamp\":\"2026-04-28T10:00:00Z\",\"type\":\"session_meta\",\"payload\":{\"id\":\"subagent-id\",\"cwd\":\"/tmp/project\",\"originator\":\"codex-tui\",\"source\":{\"subagent\":{\"thread_spawn\":{\"parent_thread_id\":\"parent-id\",\"depth\":1,\"agent_role\":\"explorer\"}}}}}\n",
|
||||||
|
"{\"timestamp\":\"2026-04-28T10:00:01Z\",\"type\":\"response_item\",\"payload\":{\"type\":\"message\",\"role\":\"user\",\"content\":\"Inspect the project\"}}\n"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.expect("write");
|
||||||
|
|
||||||
|
assert!(parse_session(&path).is_none());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_session_falls_back_to_dir_basename() {
|
fn parse_session_falls_back_to_dir_basename() {
|
||||||
let temp = tempdir().expect("tempdir");
|
let temp = tempdir().expect("tempdir");
|
||||||
|
|||||||
Reference in New Issue
Block a user