Skip to main content

talos_session/
lib.rs

1//! Talos session management — append-only session logging with tree-branching support.
2//!
3//! Sessions are stored as append-only files, organized by working directory.
4//! New sessions use the compact text `.tlog` format by default; existing `.jsonl`
5//! files are read transparently for backward compatibility. Each line in a session
6//! file represents a [`SessionEntry`] with fields for `id`, `parent_id`,
7//! `timestamp`, `role`, `content`, and optional `metadata`.
8//!
9//! # Directory Layout
10//!
11//! ```text
12//! ~/.talos/sessions/
13//!   <project>/
14//!     <uuid>.jsonl
15//! ```
16//!
17//! # Branching Model
18//!
19//! Each session supports multiple branches. A branch is a linear sequence of entries
20//! rooted at a specific entry. The `fork` method creates a new branch from any existing
21//! entry, enabling tree-structured conversations.
22//!
23//! # Crash Safety
24//!
25//! JSONL is append-only. If a crash occurs, only the last line may be corrupted,
26//! which can be detected and skipped during reads.
27//!
28//! # Backward Compatibility
29//!
30//! Entries without `id` or `parent_id` fields (from older JSONL files) are treated
31//! as part of a single linear branch. They are assigned synthetic IDs on load.
32
33mod artifacts;
34mod compact_text;
35pub mod compaction_engine;
36mod compression;
37mod diagnostic;
38mod durable;
39mod durable_recovery;
40mod error;
41mod jsonl;
42mod manager;
43mod pending_submission;
44mod runtime_state;
45mod segment_chain;
46pub mod sqlite;
47mod store;
48pub mod todo;
49mod tool_compression;
50mod tool_contributions;
51mod topology;
52mod transcript;
53pub use tool_compression::{ToolOutputCompression, compress_tool_output};
54mod turn_outcome;
55mod types;
56
57pub use artifacts::{
58    DEFAULT_MAX_ORPHAN_SIDECAR_ENTRIES, DEFAULT_ORPHAN_SIDECAR_MINIMUM_AGE, OrphanSidecarFailure,
59    OrphanSidecarReconciliationPolicy, OrphanSidecarReconciliationReport,
60    SessionArtifactCleanupReport, remove_session_artifacts_for_transcript,
61    remove_session_sidecars_for_transcript, remove_session_transcript,
62};
63pub use diagnostic::{ProviderTerminalDiagnostic, ProviderTerminalOutcome, ProviderTerminalSource};
64pub use durable::{
65    DurableSession, DurableTranscriptEntry, PersistencePolicy, SessionCapabilities, TurnCommit,
66};
67pub use error::SessionError;
68pub use manager::{
69    SessionCleanupCandidate, SessionCleanupPolicy, SessionCleanupReport, SessionManager,
70};
71pub use pending_submission::{
72    PendingSubmissionError, PendingSubmissionRecord, PendingSubmissionStore,
73};
74pub use runtime_state::{
75    SessionRuntimeActivation, SessionRuntimeActivationStatus, SessionRuntimeIdentity,
76    SessionRuntimeState,
77};
78pub use sqlite::{ForkInfo, IndexError, SearchResult, SessionIndex};
79pub use store::{CompactTextSessionStore, JsonlSessionStore, SessionStore};
80pub use todo::{
81    CreateTodo, TodoAddDependencyTool, TodoCreateBatchInput, TodoCreateBatchTool, TodoCreateInput,
82    TodoCreateTool, TodoDeleteInput, TodoDeleteTool, TodoDependency, TodoDependencyInput,
83    TodoError, TodoItem, TodoPriority, TodoQuery, TodoQueryInput, TodoQueryTool,
84    TodoRemoveDependencyTool, TodoRepository, TodoStatus, TodoUpdate, TodoUpdateBatchInput,
85    TodoUpdateBatchTool, TodoUpdateInput, TodoUpdateStatusInput, TodoUpdateStatusTool,
86    TodoUpdateTool, status_icon,
87};
88pub use tool_contributions::todo_tool_contributions_for_sessions_dir;
89pub use transcript::{TranscriptEntry, export_json, export_markdown, read_transcript};
90pub use turn_outcome::{TurnTranscriptOutcome, TurnTranscriptOutcomeRecord};
91pub use types::{Session, SessionBranch, SessionEntry, SessionInfo, SessionMetadata};
92
93#[cfg(test)]
94#[allow(warnings)]
95mod tests;