From ee51c5e5fbaea694e65bb0a4908f75bcaf9707d1 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Mon, 8 Jun 2026 20:55:51 +0300 Subject: feat: use pty-first agent detection --- src/detect/agents/grok.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/detect/agents/grok.rs') diff --git a/src/detect/agents/grok.rs b/src/detect/agents/grok.rs index 75b5cd35..8a5834a2 100644 --- a/src/detect/agents/grok.rs +++ b/src/detect/agents/grok.rs @@ -7,17 +7,11 @@ use super::super::{has_braille_spinner, AgentState}; /// status line such as "⠋ Waiting… 1.8s" plus live controls like /// "Ctrl+c:cancel" and "Ctrl+Enter:interject". pub(super) fn detect(content: &str) -> AgentState { - let lower = content.to_lowercase(); - - if lower.contains("use ← → to choose permission whitelist scope") - || lower.contains("yes, proceed") - || lower.contains("no, reject") - || lower.contains("ctrl+o:yolo") - || lower.contains(":scope") - { + if has_visible_blocker(content) { return AgentState::Blocked; } + let lower = content.to_lowercase(); if has_braille_spinner(content) && (lower.contains("waiting") || lower.contains("run ") @@ -34,3 +28,10 @@ pub(super) fn detect(content: &str) -> AgentState { AgentState::Idle } + +pub(super) fn has_visible_blocker(content: &str) -> bool { + let lower = content.to_lowercase(); + let has_scope_selector = lower.contains("use ← → to choose permission whitelist scope") + || lower.contains("←/→:scope"); + has_scope_selector && lower.contains("yes, proceed") && lower.contains("no, reject") +} -- cgit v1.2.3