blob: ad76ca27def9175c223d30f21dcd7e989f93a5df (
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
32
33
34
35
36
37
38
39
40
41
|
use super::super::AgentState;
/// Amp (Sourcegraph) detection.
///
/// Blocked approval prompts use a shared footer with options like
/// "Approve", "Allow All for This Session", "Allow All for Every Session",
/// "Allow File for Every Session", and "Deny with feedback". The header varies
/// by approval type, for example "Invoke tool ...?", "Run this command?",
/// "Allow editing file:", or "Allow creating file:".
///
/// Working layout:
/// ```text
/// ✓ Search Map the core runtime architecture...
/// ⋯ Oracle ▼
/// ≈ Running tools... Esc to cancel
/// ```
pub(super) fn detect(content: &str) -> AgentState {
let lower = content.to_lowercase();
let has_waiting_for_approval = lower.contains("waiting for approval");
let has_approval_header = lower.contains("invoke tool")
|| lower.contains("run this command?")
|| lower.contains("allow editing file:")
|| lower.contains("allow creating file:")
|| lower.contains("confirm tool call");
let has_approval_actions = lower.contains("approve")
&& (lower.contains("allow all for this session")
|| lower.contains("allow all for every session")
|| lower.contains("allow file for every session")
|| lower.contains("deny with feedback"));
if has_approval_actions && (has_waiting_for_approval || has_approval_header) {
return AgentState::Blocked;
}
if lower.contains("esc to cancel") {
return AgentState::Working;
}
AgentState::Idle
}
|