pub fn format_prefix(token: &str) -> String {
format!(
"<system-reminder>\n\
The user sent a new message while you were working: (id: {token})\n",
)
}
pub const SUFFIX: &str = "\n\n</system-reminder>";
pub fn extract_tokens(text: &str) -> Vec<String> {
static RE: std::sync::OnceLock<regex::Regex> = std::sync::OnceLock::new();
let re = RE.get_or_init(|| {
regex::Regex::new(
r"<system-reminder>\nThe user sent a new message while you were working: \(id: ([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\)\n",
)
.expect("static regex pattern is well-formed")
});
re.captures_iter(text)
.map(|c| c.get(1).expect("group 1 is present in pattern").as_str().to_string())
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn format_and_extract_round_trip() {
let token = "12345678-1234-1234-1234-1234567890ab";
let prefix = format_prefix(token);
let extracted = extract_tokens(&prefix);
assert_eq!(extracted, vec![token.to_string()]);
}
#[test]
fn no_match_on_unrelated_text() {
assert!(extract_tokens("plain old tool output").is_empty());
assert!(extract_tokens("(id: bogus)").is_empty());
assert!(extract_tokens("<system-reminder>\nDifferent text\n").is_empty());
}
#[test]
fn extracts_multiple_tokens() {
let body = format!(
"{p1}block one{s}{p2}block two{s}",
p1 = format_prefix("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"),
p2 = format_prefix("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"),
s = SUFFIX,
);
let tokens = extract_tokens(&body);
assert_eq!(
tokens,
vec![
"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa".to_string(),
"bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb".to_string(),
]
);
}
#[test]
fn uppercase_hex_does_not_match() {
let prefix = "<system-reminder>\nThe user sent a new message while you were working: (id: ABCDEF01-1234-1234-1234-1234567890AB)\n";
assert!(extract_tokens(prefix).is_empty());
}
}