#[doc = include_str!("../PLUGINS.md")]
pub mod plugin_guide {}
pub const PLUGIN_GUIDE: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/PLUGINS.md");
pub mod agent_title;
pub mod ask;
pub mod clock;
pub mod commands;
pub mod describe;
pub mod host;
mod load;
pub mod main_agent;
pub mod per_call;
pub mod pick;
pub mod plugin_data;
pub mod progress;
pub mod secrets;
pub mod services;
pub mod settings;
pub mod successor;
pub mod timings;
pub mod watch;
pub mod workspace;
pub use describe::run;
pub use load::{
AppKeepsExt, Keeps, PluginEntity, PluginSource, PluginSystems, ProvidedBy, Provides, SavedAs,
check_stages_at_start, load, stage_conflicts,
};
use bevy::MinimalPlugins;
use bevy::diagnostic::FrameCountPlugin;
use bevy::time::TimePlugin;
use bevy_app::{
Plugin, PluginGroup, PluginGroupBuilder, ScheduleRunnerPlugin, TaskPoolOptions, TaskPoolPlugin,
TaskPoolThreadAssignmentPolicy,
};
use bevy_log::LogPlugin;
pub use bevy_app::{App, AppExit};
pub use bevy_ecs::error;
pub use rig_core;
pub use rig_ecs;
pub use rig_harness_protocol as harness_protocol;
pub use rig_memory;
pub use rig_tools;
pub mod prelude {
pub use rig_ecs::prelude::*;
pub use std::time::Duration;
pub use bevy_app::OnAppExitSystems;
pub use crate::agent_title::AgentTitle;
pub use crate::ask::{Answer, Answerer, Answerers, Ask, AskSystems, Choice};
pub use crate::clock::{Due, KeepAwake, WakeAt};
pub use crate::commands::{
AppCommandsExt, CommandArgs, CommandSystems, RunCommand, SlashCommand,
};
pub use crate::harness_protocol::{Home, StartReason};
pub use crate::host::cli::{AppCliExt, Flag, Front};
pub use crate::host::exit::{Exit, ExitReason, ExitRequest};
pub use crate::host::launcher::{self, Invoked};
pub use crate::host::session::{
AppStart, DeleteSession, Logged, LoggedQueue, Scratch, SessionDeleteFailed, SessionDeleted,
SessionPaths, StoreOpener, edit_stopped, rewrite_stopped,
};
pub use crate::main_agent::{MainAgentQuery, ShownAgent, main_agent};
pub use crate::per_call::{AppPerCallExt, CallPlace, PerCallTools};
pub use crate::pick::{Chosen, Highlighted, Pick, PickItem, PickPreview, Picked, Picker};
pub use crate::plugin_data::PluginData;
pub use crate::progress::{CallOutput, ToolProgress};
pub use crate::secrets::{Secret, Secrets};
pub use crate::services::{Processes, ProjectRoot, RigHome, TokioRuntime, WorkDir};
pub use crate::settings::{AppSettingsExt, Settings};
pub use crate::successor::resend;
pub use crate::timings::{PluginTimings, SystemTimings};
pub use crate::watch::{FileChanges, FileWatch};
pub use crate::workspace::ProjectWorkspace;
pub use crate::{
AppKeepsExt, HeadlessPlugins, Keeps, PluginEntity, PluginSource, PluginSystems, ProvidedBy,
Provides, RigHarnessPlugins, SavedAs,
};
pub use rig_core::conversation::Note;
pub use rig_tools::attach::{first_typed, typed};
pub use rig_tools::{Spill, blocking};
}
pub struct RigHarnessPlugins;
impl PluginGroup for RigHarnessPlugins {
fn build(self) -> PluginGroupBuilder {
PluginGroupBuilder::start::<Self>()
.add(services::ServicesPlugin)
.add(host::session::SessionPlugin)
.add(rig_ecs::AgentPlugin)
.add(rig_ecs::session_log::SessionLogPlugin)
.add(commands::CommandPlugin)
.add(host::launcher::LauncherPlugin)
.add(host::exit::ExitPlugin)
.add(clock::ClockPlugin)
.add(watch::WatchPlugin)
.add(ask::AskPlugin)
.add(pick::PickPlugin)
.add(progress::ProgressPlugin)
}
}
pub struct HeadlessPlugins;
impl PluginGroup for HeadlessPlugins {
fn build(self) -> PluginGroupBuilder {
MinimalPlugins
.build()
.set(TaskPoolPlugin {
task_pool_options: task_pools(),
})
.disable::<ScheduleRunnerPlugin>()
.add(LogPlugin {
custom_layer: host::session::log_events,
fmt_layer: host::session::log_layer,
..LogPlugin::default()
})
.add(host::signals::ExitOnSignalPlugin)
.add(host::runner::RunnerPlugin)
}
}
pub fn windowed(plugins: impl PluginGroup) -> PluginGroupBuilder {
let plugins = without::<LogPlugin>(plugins.build());
let plugins = without::<TaskPoolPlugin>(plugins);
let plugins = without::<FrameCountPlugin>(plugins);
let plugins = without::<TimePlugin>(plugins);
let plugins = without::<ScheduleRunnerPlugin>(plugins);
#[cfg(any(unix, windows))]
let plugins = without::<bevy_app::TerminalCtrlCHandlerPlugin>(plugins);
plugins
}
fn without<P: Plugin>(plugins: PluginGroupBuilder) -> PluginGroupBuilder {
if plugins.contains::<P>() {
plugins.disable::<P>()
} else {
plugins
}
}
pub fn task_pools() -> TaskPoolOptions {
let calls = || TaskPoolThreadAssignmentPolicy {
min_threads: 2,
max_threads: 4,
percent: 0.25,
on_thread_spawn: None,
on_thread_destroy: None,
};
TaskPoolOptions {
io: calls(),
async_compute: calls(),
..TaskPoolOptions::default()
}
}