pub mod backends;
pub mod exposure;
mod journal;
mod spec;
mod toolbox;
pub use backends::control::{
control_tools, AppProfile, CommandPolicy, CLIENT_APP, CONTROL_METHODS,
};
pub use journal::JsonlJournal;
pub use spec::*;
pub use toolbox::{
DeniedBy, Journal, MemoryJournal, Metrics, ToolAdmission, ToolEvent, ToolRequest, Toolbox,
Verdict,
};
use rightkit_daemon::Suite;
use std::sync::Arc;
pub const CTL_CALLER: &str = CLIENT_APP;
pub fn control_toolbox(suite: &Suite, apps: &[&str]) -> Result<Toolbox, ToolError> {
let mut tb = Toolbox::new();
for app in apps {
add_app(&mut tb, suite, AppProfile::for_app(app))?;
}
Ok(tb)
}
pub fn add_app(tb: &mut Toolbox, suite: &Suite, profile: AppProfile) -> Result<(), ToolError> {
tb.register_all(control_tools(suite, &profile))?;
tb.allow(CTL_CALLER, profile.allow_patterns());
#[cfg(feature = "speech")]
if profile.app == "heardright" {
tb.register_all(backends::speech::speech_tools(suite))?;
tb.allow(CTL_CALLER, ["speech.transcribe", "speech.capabilities"]);
}
Ok(())
}
pub fn shared(tb: Toolbox) -> Arc<Toolbox> {
Arc::new(tb)
}