pub enum DispatchError {
Show 29 variants
NoActiveSession,
UnknownSession(SessionSlot),
SessionClosed(SessionSlot),
NoPromptWaiting {
key: SessionSlot,
tool_id: String,
},
NoDraftWaiting {
key: SessionSlot,
id: Uuid,
},
EmptySlackFeedback {
key: SessionSlot,
id: Uuid,
},
NoBrowserHandOffWaiting {
key: SessionSlot,
id: Uuid,
},
NoTerminalHandOffWaiting {
key: SessionSlot,
id: Uuid,
},
NoDocumentHandOffWaiting {
key: SessionSlot,
id: Uuid,
},
NoSettingsWriteWaiting {
key: SessionSlot,
id: Uuid,
},
NoVaultAskWaiting {
key: SessionSlot,
id: Uuid,
},
BiometricRefused {
reason: String,
},
DictateOff,
VoiceOff {
reason: String,
},
Installing,
Activating,
TakeLive {
holder: String,
},
PinnedRole {
section: &'static str,
key: String,
},
BenchRunning,
BenchNotRunning,
ReadAloudNotRecording,
ReadAloudUnavailable {
reason: String,
},
ModelInUse {
role: DictateRole,
},
UninstallRefused {
reason: String,
},
CatalogueChecking,
PluginActionRunning,
PluginHomeUnavailable,
PluginProjectRequired,
ProjectNotFound {
name: String,
},
}Expand description
Why a command did not reach a session, so a view can say which of the
three it was rather than only that something failed.
Errors from the dispatch boundary. UnknownSession and
SessionClosed are returned by Workspace::dispatch;
NoActiveSession is for a caller with no slot to name.
Variants§
NoActiveSession
UnknownSession(SessionSlot)
SessionClosed(SessionSlot)
NoPromptWaiting
NoDraftWaiting
A Slack answer named a draft the registry does not hold. Its own
word rather than Self::NoPromptWaiting’s: a draft is answered by
its own id and names no tool call, and this line is drawn where the
dock stood. Answering and the asking session going away are the
endings that leave nothing waiting, which is the condition this line
names - a send-back is an answer too, and resolves the draft just the
same.
EmptySlackFeedback
A send-back carried no words. There is nothing to hand the agent, and resolving the draft would drop the reader’s card for nothing - so the draft stays waiting and the field can be sent again.
NoBrowserHandOffWaiting
A browser hand-off answer named a hand-off the registry does not hold:
answered in another view, or its asking session went away. Its own
word for the same reason Self::NoDraftWaiting has one.
NoTerminalHandOffWaiting
A terminal hand-off answer named a hand-off the registry does not hold: answered in another view, or its asking session went away.
NoDocumentHandOffWaiting
A document hand-off answer named a hand-off the registry does not
hold: finished in another view, declined, or its asking session went
away. Its own word for the same reason Self::NoDraftWaiting has
one.
NoSettingsWriteWaiting
A settings answer named a held write the registry does not hold:
answered in another view, or its asking session went away. Its own
word for the same reason Self::NoDraftWaiting has one.
NoVaultAskWaiting
A vault answer named a held call the registry does not hold: answered
in another view, or its asking session went away. Its own word for the
same reason Self::NoDraftWaiting has one.
BiometricRefused
A biometric enrolment write was refused before anything was stored, in the core’s own words: a blob that is not base64, an empty or oversized one, a nameless purpose, or a store that could not be written.
DictateOff
A catalogue check was asked for with [dictate] switched off:
there are no pinned models for a check to be about.
VoiceOff
A speaking action was asked for with [tts] switched off or no
model files resolving: there is nothing to speak with.
Installing
An install is already running: one at a time, like a check.
Activating
An activation is already running; a second engine build would race the first one’s swap.
TakeLive
A take is in flight on holder (a slot’s display string), so the
engine cannot be swapped under it.
PinnedRole
forge.toml pins this role, so the runtime cannot move it; section
and key name the table and key that do.
BenchRunning
A bench holds the machine: it is measuring an engine, so a swap or a second run waits for it to finish or stops it.
BenchNotRunning
A stop arrived and nothing was running to stop.
ReadAloudNotRecording
No read-aloud recording is running, or it is another connection’s: only the connection that started one can stop it.
The read-aloud set would not take the change, in the core’s own words.
ModelInUse
The model is what a role runs right now, and the engine holds it loaded: the role has to be moved off it first.
Fields
role: DictateRoleUninstallRefused
The model could not be removed, in the core’s own words.
CatalogueChecking
A check is already in flight; the one that lands is the answer, and a second fetch would answer the same thing twice.
PluginActionRunning
A plugin action is already running: the CLI serializes one at a time, so a second press waits rather than racing the first.
No home directory resolves, so a plugin call with no project context has nowhere to run. Refused rather than substituting a cwd-derived directory (hard rule 14).
PluginProjectRequired
A project/local install named no project; those scopes install
into a project’s own config, so the project is the caller’s to say.
ProjectNotFound
A project-named install or update names a project forge.toml
does not declare.
Trait Implementations§
Source§impl Debug for DispatchError
impl Debug for DispatchError
Source§impl Display for DispatchError
impl Display for DispatchError
Source§impl Error for DispatchError
impl Error for DispatchError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Auto Trait Implementations§
impl Freeze for DispatchError
impl RefUnwindSafe for DispatchError
impl Send for DispatchError
impl Sync for DispatchError
impl Unpin for DispatchError
impl UnsafeUnpin for DispatchError
impl UnwindSafe for DispatchError
Blanket Implementations§
§impl<T> AnySync for T
impl<T> AnySync for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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