diff options
| author | JJ Liebig <jonathan.liebig@gmail.com> | 2026-09-04 14:54:05 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-04 14:54:05 +0200 |
| commit | 6045fe6a8735609507ec8600fa07205227546e8b (patch) | |
| tree | 2cbdd462a96b412e6bdf7349a581e016a97dc2ea /src/app | |
| parent | 3150bd92d6162ba248bc28fd4d40bd0d6238e1af (diff) | |
fix: persist Codex resume sessions at launch (#3617)
refs #3517
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/agents.rs | 5 | ||||
| -rw-r--r-- | src/app/mod.rs | 16 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/app/agents.rs b/src/app/agents.rs index f25383fe..5033505d 100644 --- a/src/app/agents.rs +++ b/src/app/agents.rs @@ -160,6 +160,8 @@ impl App { { return Err(AgentStartError::InvalidArgument); } + let persisted_agent_session = + crate::agent_resume::persisted_session_from_launch_args(kind, ¶ms.args); let conflicts = self.agent_name_conflicts(&name, ""); if !conflicts.is_empty() { return Err(AgentStartError::DuplicateName { @@ -217,6 +219,9 @@ impl App { terminal.clear_agent_name(); return Err(AgentStartError::InputFailed(err.to_string())); } + if let Some(session) = persisted_agent_session { + terminal.set_managed_agent_launch_session(session); + } self.state.mark_session_dirty(); self.schedule_session_save(); diff --git a/src/app/mod.rs b/src/app/mod.rs index 131b9729..02175481 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -2782,9 +2782,9 @@ mod tests { id: "req_agent_start_input".into(), method: crate::api::schema::Method::AgentStart(crate::api::schema::AgentStartParams { name: "worker".into(), - kind: "pi".into(), + kind: "codex".into(), pane_id: pane_id.clone(), - args: Vec::new(), + args: vec!["resume".into(), "codex-session".into()], timeout_ms: Some(4_000), }), }; @@ -2792,6 +2792,9 @@ mod tests { let response: serde_json::Value = serde_json::from_str(&response).unwrap(); assert_eq!(response["error"]["code"], "agent_start_input_failed"); assert_eq!(app.state.terminals[&terminal_id].agent_name, None); + assert!(app.state.terminals[&terminal_id] + .persisted_agent_session + .is_none()); assert_eq!( app.state.terminals[&terminal_id].manual_label.as_deref(), Some("shell") @@ -2805,6 +2808,15 @@ mod tests { let retry: serde_json::Value = serde_json::from_str(&retry).unwrap(); assert_eq!(retry["result"]["type"], "agent_started"); assert_eq!( + retry["result"]["agent"]["agent_session"], + serde_json::json!({ + "source": "herdr:codex", + "agent": "codex", + "kind": "id", + "value": "codex-session", + }) + ); + assert_eq!( app.state.terminals[&terminal_id].agent_name.as_deref(), Some("worker") ); |
