Skip to main content

NamespacedMemory

Struct NamespacedMemory 

Source
pub struct NamespacedMemory { /* private fields */ }
Expand description

Wraps a Memory store with namespace prefixing for agent isolation.

Each agent’s memory entries get IDs prefixed with {agent_name}: for provenance. Recall can search within the agent’s namespace or across all namespaces.

When max_confidentiality is set, recall queries are capped at that level regardless of what the caller requests. This is the enforcement point for sensor security — even if the LLM is tricked into calling memory_recall, the store-level filter prevents confidential data from being returned.

Implementations§

Source§

impl NamespacedMemory

Source

pub fn new(inner: Arc<dyn Memory>, agent_name: impl Into<String>) -> Self

Source

pub fn with_max_confidentiality(self, cap: Option<Confidentiality>) -> Self

Set the maximum confidentiality level for recall queries.

When set, all recall queries through this namespace will be capped at this level — entries with higher confidentiality are filtered out at the store level.

Source

pub fn with_default_store_confidentiality(self, level: Confidentiality) -> Self

Set the minimum confidentiality level for new entries stored through this namespace.

When an entry is stored with a confidentiality level below this floor, it will be upgraded to this level. Entries already at or above this level are left unchanged. This prevents LLM-driven downgrade attacks and ensures private conversations (e.g. Telegram DMs) are stored as Confidential by default without requiring the LLM to specify it.

Trait Implementations§

Source§

impl Memory for NamespacedMemory

Source§

fn store( &self, scope: &TenantScope, entry: MemoryEntry, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>

Persist entry under scope. Read more
Source§

fn recall( &self, scope: &TenantScope, query: MemoryQuery, ) -> Pin<Box<dyn Future<Output = Result<Vec<MemoryEntry>, Error>> + Send + '_>>

Recall entries matching query from scope. Read more
Source§

fn update( &self, scope: &TenantScope, id: &str, content: String, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>

Source§

fn forget( &self, scope: &TenantScope, id: &str, ) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + Send + '_>>

Add a bidirectional link between two memory entries. Default implementation is a no-op for backward compatibility.
Source§

fn prune( &self, scope: &TenantScope, min_strength: f64, min_age: Duration, _agent_prefix: Option<&str>, ) -> Pin<Box<dyn Future<Output = Result<usize, Error>> + Send + '_>>

Remove entries whose strength has decayed below min_strength and are older than min_age. Read more

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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: 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: 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