Skip to main content

Cmd

Enum Cmd 

Source
pub enum Cmd {
Show 20 variants CallModel { turn: TurnId, request: ChatRequest, }, CompactConversation { turn: TurnId, request: CompactionRequest, }, ExecuteTool { turn: TurnId, call_id: ToolCallId, source: ToolCall, model_id: String, }, CancelScope(TurnId), SaveConversation(ConversationHistory), SaveCompactionArchive(CompactionArchive), PersistLastModel(String), PersistReasoningFor { model_id: String, level: ReasoningLevel, }, RefreshInstructions, LoadConversation(String), ListConversations, InitMcpServers(HashMap<String, McpServerConfig>), StopMcpServer { name: String, }, PullOllamaModel { model: String, }, OpenInSystem(PathBuf), DismissStatusAfter { ms: u64, }, WriteImageToTemp { path: PathBuf, bytes: Vec<u8>, format: String, }, ReadClipboard, Exit, SetTerminalTitle(String),
}
Expand description

A single side-effect request. Most variants are one-shot; CallModel and ExecuteTool spawn long-running tasks inside a per-turn TurnScope.

Variants§

§

CallModel

Dispatch the next chat request. Effect runner maps this onto ModelProvider::chat for the session’s active provider.

Fields

§turn: TurnId
§request: ChatRequest
§

CompactConversation

Generate a compact context checkpoint without continuing into a normal assistant turn.

Fields

§turn: TurnId
§

ExecuteTool

Run one tool in parallel with any other tools in the same turn. The runner wires ExecContext::token to the turn’s scope so Cmd::CancelScope aborts them all at once.

model_id is the active session’s model id at the moment this tool call was emitted. The runner passes it into ExecContext so tools like SubagentTool can spawn children against the same provider the parent is using.

Fields

§turn: TurnId
§call_id: ToolCallId
§source: ToolCall
§model_id: String
§

CancelScope(TurnId)

Cancel every task in the given turn’s TurnScope. After the scope drains, the runner emits a Msg::StreamDone (with a synthetic “cancelled” marker in usage, or a batch of ToolFinished { outcome: Cancelled } for tools already running) so the reducer can transition back to Idle.

§

SaveConversation(ConversationHistory)

Save the current conversation to disk. No-op if unchanged since last save (effect-side idempotence).

§

SaveCompactionArchive(CompactionArchive)

Persist the raw messages removed by a compaction.

§

PersistLastModel(String)

Persist the active model ID as last_used_model.

§

PersistReasoningFor

Persist reasoning level tied to a specific model ID.

Fields

§model_id: String
§

RefreshInstructions

Re-stat MERMAID.md (cheap); emits Msg::InstructionsChanged only when the mtime moved or the file appeared/disappeared.

§

LoadConversation(String)

Load a specific conversation by ID and emit Msg::ConversationLoaded. Reducer consumes that event to replace the current session.

§

ListConversations

Scan the conversations directory for the /load picker. Emits Msg::ConversationsListed with one ConversationSummary per saved session (newest first). The reducer transitions to UiMode::ConversationList and the render shows the picker.

§

InitMcpServers(HashMap<String, McpServerConfig>)

Start every configured MCP server; each one emits Msg::McpServerReady or Msg::McpServerErrored as it comes up.

§

StopMcpServer

Stop a running server (e.g. config was removed, or app quit).

Fields

§name: String
§

PullOllamaModel

ollama pull <model> with progress → Msg::ModelPullFinished.

Fields

§model: String
§

OpenInSystem(PathBuf)

xdg-open / open / start on a file path. Used by the image-paste preview and the “open in editor” affordance.

§

DismissStatusAfter

Schedule Msg::StatusDismiss after ms milliseconds. Reducer uses this to self-clear transient status lines.

Fields

§ms: u64
§

WriteImageToTemp

Persist a pasted image to a temp file so the TUI can open it via OpenInSystem. Emits no follow-up Msg on success; failure is a log-and-drop.

Fields

§path: PathBuf
§bytes: Vec<u8>
§format: String
§

ReadClipboard

Read the system clipboard on a blocking task. The per-platform dispatch (xclip / wl-paste / pngpaste / PowerShell) can block for hundreds of ms on macOS via osascript, so it never runs on the reducer thread. Emits Msg::Paste(Paste::Image|Text) on success; Msg::TransientStatus when the clipboard is empty or the read fails.

§

Exit

Exit the main loop. No reply message — the loop observes state.should_exit after the reducer returns and breaks out.

§

SetTerminalTitle(String)

Write the OSC 2 terminal-title sequence. Reducer diffs against ui.last_title_dispatched so this only fires on actual title changes, not every frame.

Implementations§

Source§

impl Cmd

Source

pub fn tag(&self) -> &'static str

Human-readable tag, for tracing + replay logs. Stable across refactors (tests assert against it).

Source

pub fn is_turn_scoped(&self) -> bool

True iff this command needs to run inside a TurnScope so it can be cancelled by Cmd::CancelScope. The effect runner uses this to decide between “spawn into JoinSet” and “spawn detached”.

Source

pub fn summary(&self) -> String

For traces + the --record file — some Cmd payloads are huge (think ChatRequest::messages). This returns a compact identifier that doesn’t dump the full payload.

Trait Implementations§

Source§

impl Clone for Cmd

Source§

fn clone(&self) -> Cmd

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Cmd

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Cmd

§

impl RefUnwindSafe for Cmd

§

impl Send for Cmd

§

impl Sync for Cmd

§

impl Unpin for Cmd

§

impl UnsafeUnpin for Cmd

§

impl UnwindSafe for Cmd

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
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, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
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, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. 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, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
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