feat: discover subject session history

This commit is contained in:
2026-10-02 16:41:29 +09:00
parent 43e3b42055
commit ee6aa9de41
34 changed files with 5167 additions and 12 deletions
+9
View File
@@ -75,6 +75,7 @@ pub mod history;
mod legacy_session_log;
pub mod logged_item;
mod paste_artifact;
pub mod public_index;
pub mod public_snapshot;
pub mod segment;
pub mod segment_log;
@@ -95,6 +96,14 @@ pub use history::{
};
pub use logged_item::{LoggedContentPart, LoggedItem, LoggedRole, from_logged, to_logged};
pub use paste_artifact::PasteArtifactLimits;
pub use public_index::{
DEFAULT_SESSION_PUBLIC_INDEX_MAX_BYTES, DEFAULT_SESSION_PUBLIC_INDEX_MAX_ENTRIES,
DEFAULT_SESSION_PUBLIC_INDEX_MAX_SEGMENTS, SESSION_PUBLIC_INDEX_COMPACT_TEXT_MAX_BYTES,
SessionPublicIndex, SessionPublicIndexEntry, SessionPublicIndexEntryKind,
SessionPublicIndexLimits, SessionPublicIndexLineage, SessionPublicIndexOriginKind,
SessionPublicIndexReadError, SessionPublicIndexSegment, SessionPublicIndexToolPart,
read_session_public_index,
};
pub use public_snapshot::{
DEFAULT_RETAINED_HISTORY_MAX_ENTRIES, DEFAULT_RETAINED_HISTORY_MAX_RESPONSE_BYTES,
DEFAULT_RETAINED_HISTORY_MAX_SCAN_BYTES, DEFAULT_RETAINED_HISTORY_MAX_SEGMENTS,
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -978,7 +978,7 @@ pub fn project_session_snapshot(session_id: SessionId, log: &[LogEntry]) -> Sess
project_session_snapshot_for_segment(session_id, None, log)
}
fn project_session_snapshot_for_segment(
pub(crate) fn project_session_snapshot_for_segment(
session_id: SessionId,
segment_id: Option<SegmentId>,
log: &[LogEntry],
@@ -468,6 +468,23 @@ impl WorkerSessionStore {
Ok(())
}
/// Enumerate canonical Segment logs in ascending identity order without
/// creating or migrating state. Unlike the general [`Store`] listing, this
/// observation boundary rejects malformed names and non-regular files so a
/// persisted Segment cannot be silently omitted from a public index.
pub(crate) fn list_segments_read_only(
&self,
session_id: SessionId,
) -> Result<Vec<SegmentId>, StoreError> {
self.validate_retained_session(session_id)?;
segment_log_paths(&self.root).map(|paths| {
paths
.into_iter()
.map(|(segment_id, _)| segment_id)
.collect()
})
}
pub fn segment_log_len(&self, segment_id: SegmentId) -> Result<u64, StoreError> {
Ok(fs::metadata(self.log_path(segment_id))?.len())
}