pub struct SessionReader;Expand description
Reader for loading sessions from JSONL files.
Implementations§
Source§impl SessionReader
impl SessionReader
Sourcepub fn load_transcript(session_dir: &Path) -> Result<Vec<TranscriptEntry>>
pub fn load_transcript(session_dir: &Path) -> Result<Vec<TranscriptEntry>>
Load all transcript entries from a session directory.
If the JSONL contains a compact_boundary system entry (g157), all
entries before the last such boundary are discarded—they were
already summarised and the summary is the first entry after the
boundary. This makes resume O(post-compaction size).
Sourcepub fn load_transcript_indexed(
session_dir: &Path,
) -> Result<(Vec<TranscriptEntry>, HashMap<String, TranscriptEntry>)>
pub fn load_transcript_indexed( session_dir: &Path, ) -> Result<(Vec<TranscriptEntry>, HashMap<String, TranscriptEntry>)>
Load the transcript and build a UUID → TranscriptEntry index
alongside the ordered vec. Enables O(1) lookup by UUID (g155).
Sourcepub fn load_messages(session_dir: &Path) -> Result<Vec<Message>>
pub fn load_messages(session_dir: &Path) -> Result<Vec<Message>>
Load the transcript and convert each TranscriptEntry to a
runtime Message. Persistence-only fields (id,
parent_id, uuid, parent_uuid, timestamp, usage)
are dropped here. The result is what run_resumed expects
as its seed argument.
The system role is kept in the returned vec; callers
that want to rebuild the system prompt from Config can
filter it out manually.
Sourcepub fn scan_orphan_tool_calls(
session_dir: &Path,
registry: &ToolRegistry,
) -> Result<Vec<OrphanToolCall>>
pub fn scan_orphan_tool_calls( session_dir: &Path, registry: &ToolRegistry, ) -> Result<Vec<OrphanToolCall>>
Goal-153: scan the transcript for “orphan” tool calls — tool_calls
in the last assistant message that have no matching tool reply.
Returns an empty vec when the transcript is clean (no orphans).
Returns the orphan descriptions when one or more tool calls from the
last assistant message have no corresponding tool result message.
This is the detection side of durable execution; the handling
(skip / redo / abort) is done by the caller (cmd_resume).
registry is used to determine side_effect_at_call for orphans
(their AuditMeta was never written because the process died before
the call returned).
Sourcepub fn load_meta(session_dir: &Path) -> Result<SessionMeta>
pub fn load_meta(session_dir: &Path) -> Result<SessionMeta>
Load the session metadata from a session directory.
Sourcepub fn list_sessions(workspace: &Path) -> Result<Vec<PathBuf>>
pub fn list_sessions(workspace: &Path) -> Result<Vec<PathBuf>>
List all session directories for a given workspace.
Returns a list of session directories sorted by name (which is timestamp-prefixed, so chronological).
Sourcepub fn list_sessions_sorted_by_updated_at(
workspace: &Path,
) -> Result<Vec<(PathBuf, SessionMeta)>>
pub fn list_sessions_sorted_by_updated_at( workspace: &Path, ) -> Result<Vec<(PathBuf, SessionMeta)>>
List all session directories sorted by .meta.json
updated_at descending (most recently active first).
Used by recursive resume (g151) to pick the most-recent
session when no ID is given. Tiebreaks: when two sessions
share the same updated_at string (RFC3339 has 1-second
granularity, so ties happen during fast tests), fall back
to transcript.jsonl mtime, then session_id lexicographically.
Sessions whose .meta.json cannot be read are silently
excluded — they’re either being created or corrupted.
Auto Trait Implementations§
impl Freeze for SessionReader
impl RefUnwindSafe for SessionReader
impl Send for SessionReader
impl Sync for SessionReader
impl Unpin for SessionReader
impl UnsafeUnpin for SessionReader
impl UnwindSafe for SessionReader
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more