aboutsummaryrefslogtreecommitdiff
path: root/src/detect/agents/gemini.rs
blob: 86cf3bca91eade8255ecb7da464a2a6056e3b5b7 (plain)
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
use super::super::AgentState;

pub(super) fn detect(content: &str) -> AgentState {
    if has_visible_blocker(content) {
        return AgentState::Blocked;
    }

    let lower = content.to_lowercase();
    // Working
    if lower.contains("esc to cancel") {
        return AgentState::Working;
    }

    AgentState::Idle
}

pub(super) fn has_visible_blocker(content: &str) -> bool {
    let lower = content.to_lowercase();
    let has_choice = lower.contains("yes") || lower.contains("no");

    content.contains("│ Apply this change")
        || content.contains("│ Allow execution")
        || (has_choice
            && (lower.contains("waiting for user confirmation")
                || content.contains("│ Do you want to proceed")
                || lower.contains("do you want to proceed?")))
        || content.lines().any(|line| {
            let line = line.trim().to_ascii_lowercase();
            line.starts_with("❯") && (line.contains("yes") || line.contains("allow"))
        })
}