diff options
Diffstat (limited to 'src/detect/agents')
| -rw-r--r-- | src/detect/agents/kiro.rs | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/detect/agents/kiro.rs b/src/detect/agents/kiro.rs index 5ef1fbca..f40b9bcb 100644 --- a/src/detect/agents/kiro.rs +++ b/src/detect/agents/kiro.rs @@ -3,16 +3,11 @@ use super::super::AgentState; /// Kiro CLI detection. /// /// Kiro exposes reliable working and idle terminal markers. Tool approval -/// prompts render with a stable "requires approval" line and an action menu. +/// prompts render with stable approval wording and an action menu. pub(super) fn detect(content: &str) -> AgentState { let lower = content.to_lowercase(); - let has_approval_request = lower.contains("requires approval"); - let has_approval_actions = lower.contains("yes, single permission") - || lower.contains("trust, always allow") - || lower.contains("no (tab to edit)") - || lower.contains("esc to close"); - if has_approval_request && has_approval_actions { + if has_kiro_blocked_prompt(&lower) { return AgentState::Blocked; } @@ -25,6 +20,29 @@ pub(super) fn detect(content: &str) -> AgentState { AgentState::Idle } +fn has_kiro_blocked_prompt(lower_content: &str) -> bool { + has_tool_approval_prompt(lower_content) || has_subagent_approval_prompt(lower_content) +} + +fn has_tool_approval_prompt(lower_content: &str) -> bool { + let has_approval_request = lower_content.contains("requires approval"); + let has_approval_actions = lower_content.contains("yes, single permission") + || lower_content.contains("trust, always allow") + || lower_content.contains("no (tab to edit)") + || lower_content.contains("esc to close"); + has_approval_request && has_approval_actions +} + +fn has_subagent_approval_prompt(lower_content: &str) -> bool { + let has_approval_request = (lower_content.contains("tool approval") + || lower_content.contains("tool approvals")) + && lower_content.contains("pending from subagents"); + let has_approval_actions = lower_content.contains("approve all pending") + || lower_content.contains("configure individually") + || lower_content.contains("exit (cancel subagents)"); + has_approval_request && has_approval_actions +} + fn has_kiro_tool_spinner(content: &str) -> bool { content.lines().any(|line| { let trimmed = line.trim_start(); |
