Skip to main content

SessionReader

Struct SessionReader 

Source
pub struct SessionReader;
Expand description

Reader for loading sessions from JSONL files.

Implementations§

Source§

impl SessionReader

Source

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).

Source

pub fn load_full_history(session_dir: &Path) -> Result<Vec<LoadedEntry>>

Load the full on-disk history without discarding messages folded away by cross-turn compaction.

Unlike load_transcript / load_messages (which drop everything before the last compact_boundary so the model seed matches the post-compaction context), this keeps every line and surfaces each compaction as a LoadedEntry::CompactBoundary marker. Use this for user-facing paths — TUI session resume, session show, session export — where the user expects to see the whole conversation, not just the post-compaction tail.

The model / resume-seed paths keep using load_messages; do not feed load_full_history output into the runtime transcript.

Source

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).

Source

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.

Source

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).

Source

pub fn load_meta(session_dir: &Path) -> Result<SessionMeta>

Load the session metadata from a session directory.

Refuses to deserialize a session whose schema_version is newer than this build supports (Goal 269). Pre-Goal-269 session files have no schema_version field and load successfully via the #[serde(default)] on the struct.

Source

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).

Source

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.

Source

pub fn list_all_sessions(base: &Path) -> Result<Vec<PathBuf>>

List all session directories across all workspaces under a base path.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoMaybeUndefined<T> for T

Source§

fn into_maybe_undefined(self) -> MaybeUndefined<T>

Converts this value into a three-state builder argument.
Source§

impl<T> IntoOption<T> for T

Source§

fn into_option(self) -> Option<T>

Converts this value into an optional builder argument.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more