Skip to main content

AgentRegistry

Struct AgentRegistry 

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

Manages agent registry entries stored in .heddle/agents/.

Implementations§

Source§

impl AgentRegistry

Source

pub fn new(heddle_dir: &Path) -> Self

Create a new registry backed by <heddle_dir>/agents/.

Source

pub fn liveness_for(entry: &AgentEntry) -> Liveness

Liveness verdict for an active entry. Terminal entries (anything other than Active) are reported as Dead so reaping logic can skip them in one pass alongside crashed actives.

Source

pub fn reap_dead_for_thread(&self, thread: &str) -> Result<usize>

Reap any active reservation on thread whose owning process is no longer alive. Returns the number of entries abandoned.

This is the read-side complement of [try_reserve_thread]: callers that only need a fresh view of which sessions are alive (e.g. heddle agent list --alive-only) can run it without reserving.

Source

pub fn reap_dead(&self) -> Result<usize>

Reap dead reservations across every thread.

Source

pub fn create_generated_entry<F>(&self, build_entry: F) -> Result<AgentEntry>
where F: FnMut(&str) -> Result<AgentEntry>,

Create and persist a new agent entry with a unique generated session ID.

Source

pub fn save(&self, entry: &AgentEntry) -> Result<()>

Persist an agent entry.

Atomic write: uses write-to-temp-then-rename so a crash mid-write never leaves the TOML file truncated or partially written.

Source

pub fn load(&self, session_id: &str) -> Result<Option<AgentEntry>>

Load a single agent entry by session ID.

Source

pub fn list(&self) -> Result<Vec<AgentEntry>>

List all agent entries, most-recently-started first.

Source

pub fn update_status(&self, session_id: &str, status: AgentStatus) -> Result<()>

Update the status of an agent entry in place.

Source

pub fn update_entry<F>( &self, session_id: &str, update: F, ) -> Result<Option<AgentEntry>>
where F: FnMut(&mut AgentEntry),

Mutate an existing agent entry under the registry write lock.

Source

pub fn find_or_create_active_entry<FMatch, FUpdate, FBuild>( &self, matches: FMatch, update_existing: FUpdate, build_entry: FBuild, ) -> Result<(AgentEntry, bool)>
where FMatch: FnMut(&AgentEntry) -> bool, FUpdate: FnMut(&mut AgentEntry), FBuild: FnMut(&str) -> Result<AgentEntry>,

Under one registry write lock, reuse a matching active entry if one exists; otherwise create a new generated entry.

Source

pub fn try_reserve_thread<F>( &self, thread: &str, build_entry: F, ) -> Result<ReserveOutcome>
where F: FnMut(&str) -> Result<AgentEntry>,

Atomic “reap dead, then reserve” for a single thread.

Under one registry write lock this:

  1. Prunes terminal-status entries past their TTL.
  2. Transitions any active entry whose recorded owner has died (per liveness_for) to Abandoned.
  3. If a still-living active entry on thread remains, returns ReserveOutcome::LiveOwner with that entry.
  4. Otherwise builds and persists a new entry, returning ReserveOutcome::Reserved.

Both cmd_agent_reserve (the JSON API) and start_thread route through here, so reaping and conflict detection share exactly one code path.

Source

pub fn create_generated_entry_for_thread<F>( &self, thread: &str, build_entry: F, ) -> Result<AgentEntry>
where F: FnMut(&str) -> Result<AgentEntry>,

Backwards-compatible thin wrapper around [try_reserve_thread] that returns the same flat Result<AgentEntry> shape callers historically expected. Live-owner conflicts surface as a HeddleError::Config(..) with the same human-readable message as before.

Source

pub fn find_active_by_path( &self, worktree_root: &Path, ) -> Result<Option<AgentEntry>>

Find the active session whose visible or private execution root matches the given worktree root.

Source

pub fn find_active_by_heddle_session_id( &self, heddle_session_id: &str, ) -> Result<Option<AgentEntry>>

Find the active registry entry associated with the given Heddle session ID.

Source

pub fn find_active_by_client_instance_id( &self, client_instance_id: &str, ) -> Result<Option<AgentEntry>>

Find the active registry entry associated with a stable harness-side client instance identifier.

Source

pub fn find_active_by_native_actor_key( &self, native_actor_key: &str, ) -> Result<Option<AgentEntry>>

Find the active registry entry associated with a harness-native actor key.

Source

pub fn actor_chain_for_session( &self, session_id: &str, ) -> Result<Vec<ActorChainNode>>

Return this actor’s native parent chain, ordered root to leaf.

The lookup intentionally follows harness-native actor keys rather than thread names: subagents may work in lightweight directories or forked threads, but the native parent key is the stable “who spawned whom” edge that preserves Human -> agent -> agent attribution.

Source

pub fn find_active_by_native_instance_key_at_path( &self, native_instance_key: &str, worktree_root: &Path, ) -> Result<Option<AgentEntry>>

Find the active registry entry associated with a harness-native instance key inside the given worktree root.

Source

pub fn log_context_query( &self, session_id: &str, query: ContextQueryEntry, ) -> Result<()>

Append a context query to an active session’s log.

Best-effort: silently ignored if the session no longer exists or has completed.

Source

pub fn delete(&self, session_id: &str) -> Result<()>

Delete an agent entry.

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> 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, 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