aboutsummaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
Diffstat (limited to 'src/app')
-rw-r--r--src/app/agents.rs5
-rw-r--r--src/app/mod.rs16
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, &params.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")
);