aboutsummaryrefslogtreecommitdiff
path: root/src/detect/agents/opencode.rs
blob: 5badcad9adb928989ac1fccb043375f281f64b68 (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
use super::super::{has_interrupt_pattern, AgentState};

pub(super) fn detect(content: &str) -> AgentState {
    // Blocked
    if content.contains("△ Permission required") || has_opencode_question_prompt(content) {
        return AgentState::Blocked;
    }

    // Working
    if has_interrupt_pattern(&content.to_lowercase()) {
        return AgentState::Working;
    }

    AgentState::Idle
}

fn has_opencode_question_prompt(content: &str) -> bool {
    let lower = content.to_lowercase();
    let has_enter_action = lower.contains("enter confirm")
        || lower.contains("enter submit")
        || lower.contains("enter toggle");
    let has_question_nav = content.contains("↑↓ select") || content.contains("⇆ tab");

    lower.contains("esc dismiss") && has_enter_action && has_question_nav
}