magi-code 0.80.1

Repository-aware CLI coding agent for terminal work
Documentation
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum RunningPromptStatus {
    Running,
    Canceling,
    Canceled,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RunningPromptState {
    pub(crate) text: String,
    pub(crate) status: RunningPromptStatus,
}

use super::MissionControlState;

impl MissionControlState {
    pub(crate) fn visible_prompt_history_suffix(&self) -> Option<&str> {
        if self.visible_prompt_history_revision.get() != Some(self.prompt_content_revision()) {
            return None;
        }
        self.prompt_history_suffix()
    }
    pub(crate) fn prompt_history_suffix(&self) -> Option<&str> {
        if !self.is_prompt_focused()
            || self.subagent_viewer_visible()
            || self.top_modal().is_some()
            || self.autocomplete_visible()
            || self.prompt_editor.selection_active()
            || self.dismissed_prompt_history_revision == Some(self.prompt_content_revision())
        {
            return None;
        }
        let text = self.prompt_editor.visible_text();
        if self.prompt_editor.visible_cursor() != text.len() || self.prompt_plain_text() != text {
            return None;
        }
        self.prompt_history.suffix(&text)
    }
    pub(crate) fn start_running_prompt(&mut self, text: String) {
        self.activity_motion = Default::default();
        self.running_prompt = Some(RunningPromptState {
            text,
            status: RunningPromptStatus::Running,
        });
    }

    pub(crate) fn request_running_prompt_cancel(&mut self) -> Option<String> {
        let running = self.running_prompt.as_mut()?;
        if running.status == RunningPromptStatus::Running {
            running.status = RunningPromptStatus::Canceling;
        }
        Some(running.text.clone())
    }

    pub(crate) fn mark_running_prompt_canceled(&mut self) -> Option<String> {
        let running = self.running_prompt.as_mut()?;
        running.status = RunningPromptStatus::Canceled;
        Some(running.text.clone())
    }

    pub(crate) fn clear_running_prompt(&mut self) {
        self.running_prompt = None;
    }

    pub(crate) fn running_prompt_cancelable(&self) -> bool {
        self.running_prompt
            .as_ref()
            .is_some_and(|running| running.status == RunningPromptStatus::Running)
    }
}