use bamboo_agent_core::{Message, Role};
use bamboo_domain::Session;
pub fn is_system_resume_message(message: &Message) -> bool {
if !matches!(message.role, Role::User) {
return false;
}
let Some(metadata) = message.metadata.as_ref() else {
return false;
};
if metadata
.get("hidden_from_ui")
.and_then(|value| value.as_bool())
.unwrap_or(false)
{
return true;
}
matches!(
metadata
.get("runtime_kind")
.and_then(|value| value.as_str()),
Some("child_completion_resume")
| Some("retry_resume")
| Some("conclusion_with_options_resume")
| Some("clarification_resume")
| Some("gold_continue_resume")
| Some("gold_goal_resume")
)
}
pub fn is_billable_user_turn(message: &Message) -> bool {
matches!(message.role, Role::User) && !is_system_resume_message(message)
}
pub fn billable_user_turn_count(session: &Session) -> usize {
session
.messages
.iter()
.filter(|message| is_billable_user_turn(message))
.count()
}