1pub mod edit_stats;
2pub mod error;
3pub mod history;
4pub mod import;
5pub mod pairing;
6pub mod run_stats;
7pub mod search;
8pub mod session;
9pub mod stream_rules;
10pub mod title;
11pub mod tree;
12mod worktree_snapshot;
13
14pub use edit_stats::EditStats;
15pub use error::{Result, SessionError};
16pub use history::{Restored, SessionHistory, StashSlot};
17pub use import::{ImportKind, import_messages};
18pub use run_stats::{ModelTally, RunStats, ToolTally, stats_report};
19pub use search::{SessionSearchHit, query_terms, search_sessions};
20pub use session::{
21 COMPACT_CONTINUATION_PREAMBLE, CheckpointState, CompactOutcome, Session, SessionCost,
22 compact_summary_display_text, format_compact_summary, format_compact_summary_content,
23 is_compact_summary_text,
24};
25pub use stream_rules::StreamRuleLedger;
26pub use title::{TitleSource, default_title, heuristic_title, sanitize_title};
27pub use tree::{Branch, BranchError, TreeRow, TreeTarget};
28pub use worktree_snapshot::{GitTree, TreeSnapshot};
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33 use std::path::Path;
34
35 #[test]
36 fn public_reexports_are_callable() {
37 assert_eq!(sanitize_title(" Title. "), "Title");
38 assert_eq!(heuristic_title("please fix login"), "fix login");
39 assert!(default_title(Path::new("/tmp/app"), "ab").contains("app"));
40 assert!(is_compact_summary_text("[Compacted earlier]"));
41 assert_eq!(format_compact_summary("ok"), "ok");
42 assert!(!COMPACT_CONTINUATION_PREAMBLE.is_empty());
43 assert!(TitleSource::Default.allows_heuristic());
44 assert_eq!(ImportKind::parse("auto"), ImportKind::Auto);
45 assert!(!SessionHistory::new().can_undo());
46 }
47}