Server-owned Vibe session process.
A session owns semantic UI state, accepts UI-neutral commands, emits events to subscribers, and delegates model work through an injectable ask function. TUI and LiveView clients attach to the same session model instead of owning the conversation themselves.
Sessions are supervised and can be looked up, attached, detached, searched, and restored from durable SQLite-backed event history.
Summary
Functions
Intentional facade for the public Vibe API boundary.
Returns prompt options passed to the agent after session-only keys are removed.
Returns a specification to start this module under a supervisor.
Intentional facade for the public Vibe API boundary.
Types
Functions
@spec active_count() :: non_neg_integer()
Intentional facade for the public Vibe API boundary.
Returns prompt options passed to the agent after session-only keys are removed.
@spec attach(GenServer.server(), pid(), keyword()) :: {:ok, Vibe.UI.State.t(), non_neg_integer()}
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec detach(GenServer.server(), pid()) :: :ok
@spec dispatch(GenServer.server(), Vibe.UI.Command.t() | atom() | {atom(), map()}) :: :ok
@spec emit_event(GenServer.server(), Vibe.UI.Event.t()) :: :ok
@spec emit_transient_event(GenServer.server(), Vibe.UI.Event.t()) :: :ok
Intentional facade for the public Vibe API boundary.
@spec lock(GenServer.server(), String.t(), pid()) :: :ok
@spec search( String.t(), keyword() ) :: [Vibe.Storage.Search.Result.t()]
@spec start_link(keyword()) :: GenServer.on_start()
@spec state(GenServer.server()) :: Vibe.UI.State.t()
@spec subscribe(GenServer.server(), pid()) :: :ok
@spec unlock(GenServer.server(), String.t()) :: :ok