File size: 1,450 Bytes
afa0cbf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//! Confirmation for copying the invoking CLI package into a daemon installation.

use std::io::IsTerminal;

use anyhow::Result;
use codex_app_server_daemon::InstallRequest;

pub(crate) fn confirm_install(request: &InstallRequest, yes: bool) -> Result<bool> {
    eprintln!("{}", describe_install(request));
    if yes {
        return Ok(true);
    }
    anyhow::ensure!(
        std::io::stdin().is_terminal() && std::io::stderr().is_terminal(),
        "daemon installation requires confirmation; rerun with --yes to copy this CLI package"
    );
    let confirmed = crate::confirm("Copy this package? [y/N]: ")?;
    if !confirmed {
        eprintln!("Daemon installation cancelled.");
    }
    Ok(confirmed)
}

fn describe_install(request: &InstallRequest) -> String {
    let mut message = format!(
        "Replace installed daemon version {} with CLI version {} from {}.\nThe daemon package will be installed in {}.\nThe selected package will be pinned. Run `codex app-server daemon update` to return to production updates.",
        request.installed_version.as_deref().unwrap_or("unknown"),
        request.version,
        request.source.display(),
        request.destination.display()
    );
    if request.restart_required {
        message.push_str(
            "\nThe running daemon will restart; active or queued work may be interrupted.",
        );
    }
    message
}

#[cfg(test)]
#[path = "daemon_install_tests.rs"]
mod tests;