pub struct CodingSessionMemory { /* private fields */ }Expand description
≤50 LOC public surface (HELIOS-01 contract). Nine methods on
CodingSessionMemory + AsOfScratchpad::read = 10 public symbols total.
v2 — delegates to WorkingMemory per HELIOS-03 / CONTEXT.md D-01.
Clone is cheap — all fields are Arc / String / WorkingMemory
(which is itself Arc<Lunaris> + String).
Implementations§
Source§impl CodingSessionMemory
impl CodingSessionMemory
Sourcepub fn new(lunaris: Arc<Lunaris>, scope: Scope, session_id: &str) -> Self
pub fn new(lunaris: Arc<Lunaris>, scope: Scope, session_id: &str) -> Self
Construct a new scratchpad bound to scope (RFC 0001 partition key)
and session_id. The session prefix becomes
helios:fs/<session_id>/ — every write/read/edit/grep/ls operation
scopes through it on the source field, while scope partitions the
underlying KV / FT keyspace.
Sourcepub async fn write(
&self,
path: &str,
content: impl Into<String>,
) -> Result<Lsn, LunarisError>
pub async fn write( &self, path: &str, content: impl Into<String>, ) -> Result<Lsn, LunarisError>
Write content to path. Delegates to WorkingMemory::write with the
content wrapped as Value::String. The Phase 9 primitive routes through
Lunaris::ingest — the single atomic_write invariant (INGEST-04) is
preserved, with exactly one level of indirection added.
Sourcepub async fn write_dated(
&self,
path: &str,
content: impl Into<String>,
t_ref: DateTime<Utc>,
) -> Result<Lsn, LunarisError>
pub async fn write_dated( &self, path: &str, content: impl Into<String>, t_ref: DateTime<Utc>, ) -> Result<Lsn, LunarisError>
Self::write with the content’s real-world date stamped as
lunaris_core::Episode::t_ref — see WorkingMemory::write_dated.
Sourcepub async fn read(&self, path: &str) -> Result<Option<String>, LunarisError>
pub async fn read(&self, path: &str) -> Result<Option<String>, LunarisError>
Read the latest content at path. Delegates to WorkingMemory::read
and unwraps the Value::String back into the caller’s String — the
byte-for-byte-preserving inverse of Self::write. Non-String
variants raise LunarisError::Storage(Backend(...)) (T-12-01-02
mitigation — refuses to decode ambiguous payloads).
Sourcepub async fn edit(
&self,
path: &str,
_old: &str,
new: &str,
) -> Result<Lsn, LunarisError>
pub async fn edit( &self, path: &str, _old: &str, new: &str, ) -> Result<Lsn, LunarisError>
Replace the contents at path with new. _old is accepted for the
helios-rfc Read/Edit surface symmetry but intentionally unused —
Plan 04-04’s apply_supersede stamps the prior version’s bt.sys[1]
when the new ingest commits. NO new mutation code lives here (D-15).
Sourcepub async fn grep(
&self,
pattern: &str,
k: usize,
) -> Result<Vec<Hit>, LunarisError>
pub async fn grep( &self, pattern: &str, k: usize, ) -> Result<Vec<Hit>, LunarisError>
Hybrid retrieval (Vector + Keyword(BM25) + RRF + rerank defaults per
Lunaris::recall) scoped to the helios:fs/<sid>/ prefix via
Filter::StartsWith — NEVER a SQL wildcard fragment (T-12-01-01
mitigation against crafted session_id escape).
NOTE (delegation strategy): grep stays on the direct recall path
rather than forwarding to WorkingMemory::grep because Hit exposes
the rerank score / metadata columns the Helios caller consumes;
WorkingMemory::grep reshapes hits into (source, Value) tuples and
would force an Arc<Hit> round-trip. “Delegation in spirit” is
preserved: the same StartsWith filter + fused recall plan the
primitive uses.
Sourcepub async fn ls(
&self,
prefix: Option<&str>,
) -> Result<Vec<String>, LunarisError>
pub async fn ls( &self, prefix: Option<&str>, ) -> Result<Vec<String>, LunarisError>
List unique stored paths under the optional sub-prefix. Walks
StoragePort::scan_range over episode: keys and strips the
session_prefix tail. Unchanged from v0.1.0 — WorkingMemory exposes
no equivalent primitive so the direct StoragePort path is retained.
Sourcepub async fn forget(&self) -> Result<ForgetReceipt, LunarisError>
pub async fn forget(&self) -> Result<ForgetReceipt, LunarisError>
GDPR-style purge of every primitive under the session prefix. Plan 04-05
BySource prefix-match path; soft-delete by default. Production callers
requiring hard delete go through the umbrella
Lunaris::confirm_hard_forget two-step rail (D-21).
Sourcepub fn as_of(&self, ts: Hlc) -> AsOfScratchpad<'_>
pub fn as_of(&self, ts: Hlc) -> AsOfScratchpad<'_>
Borrowed time-travel view per helios-rfc §5.3. pad.as_of(ts).read(path)
returns the content as it existed at ts (uses
RetrievalBuilder::as_of(ts) under the hood).
Trait Implementations§
Source§impl Clone for CodingSessionMemory
impl Clone for CodingSessionMemory
Source§fn clone(&self) -> CodingSessionMemory
fn clone(&self) -> CodingSessionMemory
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for CodingSessionMemory
impl !UnwindSafe for CodingSessionMemory
impl Freeze for CodingSessionMemory
impl Send for CodingSessionMemory
impl Sync for CodingSessionMemory
impl Unpin for CodingSessionMemory
impl UnsafeUnpin for CodingSessionMemory
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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