mod encryption;
mod filename;
mod renderer;
mod scripts;
mod styles;
mod template;
pub use encryption::{EncryptedContent, EncryptionError, EncryptionParams, encrypt_content};
pub use filename::{
FilenameMetadata, FilenameOptions, agent_slug, datetime_slug, extract_topic, generate_filename,
generate_filepath, generate_full_filename, get_downloads_dir, is_valid_filename,
normalize_topic, unique_filename, workspace_slug,
};
pub use renderer::{
Message, MessageGroup, MessageGroupType, RenderError, RenderOptions, ToolCall,
ToolCallWithResult, ToolResult, ToolStatus, agent_css_class, agent_display_name,
render_message, render_message_groups,
};
pub use scripts::{ScriptBundle, generate_scripts};
pub use styles::{StyleBundle, generate_styles};
pub use template::{ExportOptions, HtmlExporter, HtmlTemplate, TemplateError, TemplateMetadata};
pub mod colors {
pub const BG_DEEP: &str = "#1a1b26";
pub const BG_SURFACE: &str = "#24283b";
pub const BG_HIGHLIGHT: &str = "#292e42";
pub const BORDER: &str = "#3b4261";
pub const BORDER_FOCUS: &str = "#7d91c8";
pub const TEXT_PRIMARY: &str = "#c0caf5";
pub const TEXT_SECONDARY: &str = "#a9b1d6";
pub const TEXT_MUTED: &str = "#696e9e";
pub const TEXT_DISABLED: &str = "#444b6a";
pub const ACCENT_PRIMARY: &str = "#7aa2f7";
pub const ACCENT_SECONDARY: &str = "#bb9af7";
pub const ACCENT_TERTIARY: &str = "#7dcfff";
pub const ROLE_USER: &str = "#9ece6a";
pub const ROLE_AGENT: &str = "#7aa2f7";
pub const ROLE_TOOL: &str = "#ff9e64";
pub const ROLE_SYSTEM: &str = "#e0af68";
pub const STATUS_SUCCESS: &str = "#73daca";
pub const STATUS_WARNING: &str = "#e0af68";
pub const STATUS_ERROR: &str = "#f7768e";
pub const STATUS_INFO: &str = "#7dcfff";
pub const ROLE_USER_BG: &str = "#1a201e";
pub const ROLE_AGENT_BG: &str = "#1a1c24";
pub const ROLE_TOOL_BG: &str = "#201c1a";
pub const ROLE_SYSTEM_BG: &str = "#201e1a";
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_colors_are_valid_hex() {
let all_colors = [
colors::BG_DEEP,
colors::BG_SURFACE,
colors::BG_HIGHLIGHT,
colors::BORDER,
colors::BORDER_FOCUS,
colors::TEXT_PRIMARY,
colors::TEXT_SECONDARY,
colors::TEXT_MUTED,
colors::TEXT_DISABLED,
colors::ACCENT_PRIMARY,
colors::ACCENT_SECONDARY,
colors::ACCENT_TERTIARY,
colors::ROLE_USER,
colors::ROLE_AGENT,
colors::ROLE_TOOL,
colors::ROLE_SYSTEM,
colors::ROLE_USER_BG,
colors::ROLE_AGENT_BG,
colors::ROLE_TOOL_BG,
colors::ROLE_SYSTEM_BG,
colors::STATUS_SUCCESS,
colors::STATUS_WARNING,
colors::STATUS_ERROR,
colors::STATUS_INFO,
];
for color in all_colors {
assert!(
color.starts_with('#') && color.len() == 7,
"Invalid color format: {}",
color
);
assert!(
color[1..].chars().all(|c| c.is_ascii_hexdigit()),
"Invalid hex in color: {}",
color
);
}
}
}