Skip to main content

SessionParseState

Struct SessionParseState 

Source
pub struct SessionParseState {
Show 17 fields pub mode: ParseMode, pub write_details: Vec<CodeAnalysisWriteDetail>, pub read_details: Vec<CodeAnalysisReadDetail>, pub edit_details: Vec<CodeAnalysisApplyDiffDetail>, pub run_details: Vec<CodeAnalysisRunCommandDetail>, pub tool_counts: CodeAnalysisToolCalls, pub unique_files: FastHashSet<String>, pub total_write_lines: usize, pub total_read_lines: usize, pub total_edit_lines: usize, pub total_write_characters: usize, pub total_read_characters: usize, pub total_edit_characters: usize, pub folder_path: String, pub git_remote: String, pub task_id: String, pub last_ts: i64,
}
Expand description

Common parse state shared by all per-provider session parsers.

Construct with SessionParseState::new (full detail) or SessionParseState::with_mode, populate the metadata fields (folder_path, git_remote, task_id) directly as the provider header is read, feed file operations through the add_* helpers, then call SessionParseState::into_record to produce the final CodeAnalysisRecord. Not thread-safe; one instance parses one file on one thread.

Fields§

§mode: ParseMode

Detail-retention level chosen at construction.

§write_details: Vec<CodeAnalysisWriteDetail>

Per-Write detail records (empty in ParseMode::UsageOnly).

§read_details: Vec<CodeAnalysisReadDetail>

Per-Read detail records (empty in ParseMode::UsageOnly).

§edit_details: Vec<CodeAnalysisApplyDiffDetail>

Per-Edit/diff detail records (empty in ParseMode::UsageOnly).

§run_details: Vec<CodeAnalysisRunCommandDetail>

Per-Bash/run-command detail records (empty in ParseMode::UsageOnly).

§tool_counts: CodeAnalysisToolCalls

Running per-tool call counts (always tallied, both modes).

§unique_files: FastHashSet<String>

Distinct normalized file paths touched (populated in both parse modes).

§total_write_lines: usize

Sum of lines written across all Write operations.

§total_read_lines: usize

Sum of lines read across all Read operations.

§total_edit_lines: usize

Sum of new-content lines across all Edit operations.

§total_write_characters: usize

Sum of characters written across all Write operations.

§total_read_characters: usize

Sum of characters read across all Read operations.

§total_edit_characters: usize

Sum of new-content characters across all Edit operations.

§folder_path: String

Session working directory; used to resolve relative paths to absolute.

§git_remote: String

Git remote URL for the session’s repository, when known.

§task_id: String

Provider-specific session identifier.

§last_ts: i64

Latest event timestamp seen, in epoch milliseconds.

Implementations§

Source§

impl SessionParseState

Source

pub fn new() -> Self

Creates an empty parse state in ParseMode::Full.

§Examples
use vct_core::session::state::SessionParseState;

let mut state = SessionParseState::new();
state.folder_path = "/repo".to_string();
state.add_read_detail("src/main.rs", "fn main() {}\n", 0);
assert_eq!(state.total_read_lines, 1);
assert_eq!(state.tool_counts.read, 1);
Source

pub fn with_mode(mode: ParseMode) -> Self

Creates an empty parse state with the given detail-retention mode.

In ParseMode::Full the detail Vecs are pre-sized to typical session sizes. unique_files is pre-sized in both modes because total_unique_files is a scalar total that must stay exact.

Source

pub fn add_read_detail(&mut self, path: &str, content: &str, ts: i64)

Records a Read operation against path with the read content.

Trailing newlines are stripped before counting. No-op (and no count bump) when the trimmed content is empty or when path normalizes to an empty string. The detail record is only stored in ParseMode::Full; counts and unique-file tracking accrue in both modes.

Source

pub fn add_write_detail(&mut self, path: &str, content: &str, ts: i64)

Records a Write operation against path with the written content.

Trailing newlines are stripped before counting. No-op when path normalizes to an empty string (an empty body is still counted as a zero-line write). The full detail (including content) is stored only in ParseMode::Full; unique-file tracking remains active in both modes.

Source

pub fn add_edit_detail(&mut self, path: &str, old: &str, new: &str, ts: i64)

Records an Edit operation against path, replacing old with new.

When old is empty but new is not, the edit is reclassified as a Write (a new-file creation expressed as a diff) and forwarded to SessionParseState::add_write_detail. Otherwise delegates to SessionParseState::add_edit_detail_raw.

Source

pub fn add_edit_detail_raw(&mut self, path: &str, old: &str, new: &str, ts: i64)

Records an Edit operation against path without the new-file reclassification in SessionParseState::add_edit_detail.

Used for patch hunks that update an existing file, where an empty old just means an insert-only hunk. The line/character tally is taken from the trimmed new content. No-op when path normalizes to an empty string; full detail stored only in ParseMode::Full.

Source

pub fn add_run_command(&mut self, command: &str, description: &str, ts: i64)

Records a Bash/run-command invocation with its command text.

No-op (and no count bump) when command is empty after trimming. The detail record (attributed to folder_path) is stored only in ParseMode::Full; the bash count accrues in both modes.

Source

pub fn normalize_path(&self, path: &str) -> String

Resolves path to an absolute path, joining it onto folder_path.

Returns the input unchanged when it is already absolute, when it is empty, or when folder_path is empty (nothing to join against).

Source

pub fn merge(&mut self, other: Self)

Merges another accumulator created with the same parse mode.

This is used when a provider must deduplicate message revisions before producing one session record. Detail vectors remain empty in ParseMode::UsageOnly, while scalar totals and unique paths are combined in both modes.

Source

pub fn into_record( self, conversation_usage: FastHashMap<String, Value>, ) -> CodeAnalysisRecord

Consumes the state into a finished CodeAnalysisRecord.

conversation_usage is the per-model token map the provider parser accumulated separately; it is folded into the record verbatim.

Trait Implementations§

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<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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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