use std::collections::HashSet;
use crate::config_edit::branch::GoverningConfig;
use crate::files_view::{self, FilesView, Preview};
use crate::inboxview::{self, Deposit};
use crate::keymap::InspectorTab;
use crate::steps_view::{self, StepDetail, StepTab, StepsView};
use crate::transcript::{self, Transcript};
#[derive(Clone)]
pub struct TabData {
pub transcript: Transcript,
pub raw: bool,
pub steps: StepsView,
pub step_sel: Option<usize>,
pub step_detail: Option<StepDetail>,
pub step_tab: StepTab,
pub inbox: Vec<Deposit>,
pub files: FilesView,
pub file_preview: Option<Preview>,
pub governing: Option<GoverningConfig>,
}
pub fn render(
ui: &mut egui::Ui,
tab: InspectorTab,
data: &TabData,
collapsed: &mut HashSet<String>,
file_sel: &mut Option<usize>,
) {
match tab {
InspectorTab::Transcript => transcript::render(ui, &data.transcript, data.raw),
InspectorTab::Steps => steps_view::render(
ui,
&data.steps,
data.step_sel,
data.step_detail.as_ref(),
data.step_tab,
collapsed,
),
InspectorTab::Inbox => inboxview::render(ui, &data.inbox),
InspectorTab::Files => {
files_view::render(ui, &data.files, data.file_preview.as_ref(), file_sel);
}
InspectorTab::Config => render_config(ui, data.governing.as_ref()),
}
}
fn render_config(ui: &mut egui::Ui, governing: Option<&GoverningConfig>) {
let Some(gov) = governing else {
ui.weak("no governing config for this agent");
return;
};
ui.strong(gov.frozen_label());
if let Some(name) = &gov.branch_name_if_tip_of_one {
ui.weak(format!("tip of config/{name}"));
}
egui::ScrollArea::vertical().show(ui, |ui| {
for file in &gov.files {
ui.monospace(file);
}
});
}
#[cfg(test)]
mod tests;