optimize: terminal spawn lifecycle to eliminate output race condition

Move PTY spawn from context layer to view layer so event subscription
happens before spawn, preventing loss of initial terminal output.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
xintaofei
2026-04-02 13:55:38 +08:00
parent d0e0aad525
commit b2d10fa008
8 changed files with 143 additions and 60 deletions

View File

@@ -18,6 +18,7 @@ use crate::terminal::types::TerminalInfo;
pub struct TerminalSpawnParams {
pub working_dir: String,
pub initial_command: Option<String>,
pub terminal_id: Option<String>,
}
#[derive(Deserialize)]
@@ -50,7 +51,10 @@ pub async fn terminal_spawn(
Json(params): Json<TerminalSpawnParams>,
) -> Result<Json<String>, AppCommandError> {
let manager = &state.terminal_manager;
let terminal_id = uuid::Uuid::new_v4().to_string();
let terminal_id = params
.terminal_id
.filter(|id| !id.is_empty() && id.len() <= 256)
.unwrap_or_else(|| uuid::Uuid::new_v4().to_string());
let extra_env = prepare_credential_env(&state.data_dir);