mod ball;
mod conversation;
use crate::boundary::Gesture;
pub(crate) fn gestures() -> Vec<Gesture> {
[
conversation::surface(),
ball::surface(),
super::start::surface(),
super::fan::surface(),
super::fork::surface(),
super::control::surface(),
super::fleet::surface(),
super::retarget::surface(),
super::workflow::surface(),
super::query::surface(),
login(),
pins(),
enroll(),
spend(),
crate::boundary::codec::config::tests::surface(),
]
.concat()
}
fn pins() -> Vec<Gesture> {
[true, false]
.into_iter()
.map(|pinned| {
Gesture::Act(crate::boundary::Action::Pin {
workspace: "ws".to_owned(),
pinned,
})
})
.collect()
}
fn spend() -> Vec<Gesture> {
use crate::boundary::Action;
let price = |model: &str, rates| {
Gesture::Act(Action::Price {
provider: "anthropic".to_owned(),
model: model.to_owned(),
rates,
})
};
vec![
price(
"claude-opus-4-1",
Some(crate::spend::Price {
input: 15_000_000,
output: 75_000_000,
cache_read: 1_500_000,
cache_write: 18_750_000,
}),
),
price(
crate::spend::ANY,
Some(crate::spend::Price {
input: 3_000_000,
output: 15_000_000,
cache_read: 0,
cache_write: 0,
}),
),
price("claude-opus-4-1", None),
Gesture::Act(Action::Ceiling {
micro_usd: Some(25_000_000),
}),
Gesture::Act(Action::Ceiling { micro_usd: None }),
Gesture::Ask(crate::boundary::Query::Prices),
]
}
fn login() -> Vec<Gesture> {
vec![Gesture::Act(crate::boundary::Action::Login {
workspace: "ws".to_owned(),
provider: "acme".to_owned(),
})]
}
fn enroll() -> Vec<Gesture> {
let request = |grade, address: Option<&str>| {
Gesture::Act(crate::boundary::Action::Enroll(
crate::registry::enroll::Request {
workspace: "ws".to_owned(),
name: "phone-1".to_owned(),
grade,
address: address.map(str::to_owned),
},
))
};
vec![
request(crate::registry::Grade::Operator, None),
request(crate::registry::Grade::Foot, None),
request(
crate::registry::Grade::Operator,
Some("engine.invalid:7737"),
),
]
}