use meerkat_machine_dsl::machine;
use meerkat_machine_schema::catalog::dsl::OptionValueExt;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct SessionId(pub String);
impl<T: Into<String>> From<T> for SessionId {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl SessionId {
pub fn from_domain(id: &meerkat_core::types::SessionId) -> Self {
Self(id.to_string())
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct AgentRuntimeId(pub String);
impl<T: Into<String>> From<T> for AgentRuntimeId {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl AgentRuntimeId {
pub fn from_domain(id: &crate::identifiers::LogicalRuntimeId) -> Self {
Self(id.to_string())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct FenceToken(pub u64);
impl From<u64> for FenceToken {
fn from(v: u64) -> Self {
Self(v)
}
}
impl FenceToken {
pub fn from_domain(value: u64) -> Self {
Self(value)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct Generation(pub u64);
impl From<u64> for Generation {
fn from(v: u64) -> Self {
Self(v)
}
}
impl Generation {
pub fn from_domain(value: u64) -> Self {
Self(value)
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct RunId(pub String);
impl<T: Into<String>> From<T> for RunId {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl RunId {
pub fn from_domain(id: &meerkat_core::lifecycle::RunId) -> Self {
Self(id.to_string())
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct InputId(pub String);
impl<T: Into<String>> From<T> for InputId {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl InputId {
pub fn from_domain(id: &meerkat_core::lifecycle::InputId) -> Self {
Self(id.to_string())
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct WorkId(pub String);
impl<T: Into<String>> From<T> for WorkId {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl WorkId {
pub fn from_domain(id: &meerkat_core::lifecycle::InputId) -> Self {
Self(id.to_string())
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct OperationId(pub String);
impl<T: Into<String>> From<T> for OperationId {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl OperationId {
pub fn from_domain(id: &meerkat_core::ops::OperationId) -> Self {
Self::from(serde_json::to_string(id).unwrap_or_else(|_| "\"unknown\"".to_string()))
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct WaitRequestId(pub String);
impl<T: Into<String>> From<T> for WaitRequestId {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl WaitRequestId {
pub fn from_domain(id: &meerkat_core::lifecycle::WaitRequestId) -> Self {
Self(id.to_string())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum OperationKind {
#[default]
MobMemberChild,
BackgroundToolOp,
}
impl From<meerkat_core::ops_lifecycle::OperationKind> for OperationKind {
fn from(kind: meerkat_core::ops_lifecycle::OperationKind) -> Self {
match kind {
meerkat_core::ops_lifecycle::OperationKind::MobMemberChild => Self::MobMemberChild,
meerkat_core::ops_lifecycle::OperationKind::BackgroundToolOp => Self::BackgroundToolOp,
}
}
}
impl From<OperationKind> for meerkat_core::ops_lifecycle::OperationKind {
fn from(kind: OperationKind) -> Self {
match kind {
OperationKind::MobMemberChild => Self::MobMemberChild,
OperationKind::BackgroundToolOp => Self::BackgroundToolOp,
}
}
}
impl OperationKind {
pub fn from_domain(kind: &meerkat_core::ops_lifecycle::OperationKind) -> Self {
Self::from(*kind)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum Provider {
#[default]
Anthropic,
OpenAI,
Gemini,
SelfHosted,
Other,
}
impl From<meerkat_core::provider::Provider> for Provider {
fn from(p: meerkat_core::provider::Provider) -> Self {
match p {
meerkat_core::provider::Provider::Anthropic => Self::Anthropic,
meerkat_core::provider::Provider::OpenAI => Self::OpenAI,
meerkat_core::provider::Provider::Gemini => Self::Gemini,
meerkat_core::provider::Provider::SelfHosted => Self::SelfHosted,
meerkat_core::provider::Provider::Other => Self::Other,
}
}
}
impl From<Provider> for meerkat_core::provider::Provider {
fn from(p: Provider) -> Self {
match p {
Provider::Anthropic => Self::Anthropic,
Provider::OpenAI => Self::OpenAI,
Provider::Gemini => Self::Gemini,
Provider::SelfHosted => Self::SelfHosted,
Provider::Other => Self::Other,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct AuthBindingRef {
pub realm_id: String,
pub binding_id: String,
pub profile_id: Option<String>,
}
impl From<&meerkat_core::AuthBindingRef> for AuthBindingRef {
fn from(r: &meerkat_core::AuthBindingRef) -> Self {
Self {
realm_id: r.realm.as_str().to_owned(),
binding_id: r.binding.as_str().to_owned(),
profile_id: r.profile.as_ref().map(|p| p.as_str().to_owned()),
}
}
}
impl TryFrom<AuthBindingRef> for meerkat_core::AuthBindingRef {
type Error = meerkat_core::IdentityError;
fn try_from(r: AuthBindingRef) -> Result<Self, Self::Error> {
Ok(Self {
realm: meerkat_core::RealmId::parse(&r.realm_id)?,
binding: meerkat_core::BindingId::parse(&r.binding_id)?,
profile: r
.profile_id
.as_deref()
.map(meerkat_core::ProfileId::parse)
.transpose()?,
})
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct SessionLlmIdentity {
pub model: String,
pub provider: Provider,
pub self_hosted_server_id: Option<String>,
pub provider_params_repr: Option<String>,
pub auth_binding: Option<AuthBindingRef>,
}
impl SessionLlmIdentity {
pub fn from_domain(id: &meerkat_core::SessionLlmIdentity) -> Self {
Self {
model: id.model.clone(),
provider: Provider::from(id.provider),
self_hosted_server_id: id.self_hosted_server_id.clone(),
provider_params_repr: id
.provider_params
.as_ref()
.map(|v| serde_json::to_string(v).unwrap_or_default()),
auth_binding: id.auth_binding.as_ref().map(AuthBindingRef::from),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct SessionToolVisibilityState {
pub capability_base_filter: ToolFilter,
pub inherited_base_filter: ToolFilter,
pub active_filter: ToolFilter,
pub staged_filter: ToolFilter,
pub active_requested_deferred_names: std::collections::BTreeSet<String>,
pub staged_requested_deferred_names: std::collections::BTreeSet<String>,
pub active_revision: u64,
pub staged_revision: u64,
pub requested_witnesses: std::collections::BTreeMap<String, ToolVisibilityWitness>,
pub filter_witnesses: std::collections::BTreeMap<String, ToolVisibilityWitness>,
}
impl SessionToolVisibilityState {
pub fn from_domain(id: &meerkat_core::SessionToolVisibilityState) -> Self {
Self {
capability_base_filter: ToolFilter::from(&id.capability_base_filter),
inherited_base_filter: ToolFilter::from(&id.inherited_base_filter),
active_filter: ToolFilter::from(&id.active_filter),
staged_filter: ToolFilter::from(&id.staged_filter),
active_requested_deferred_names: id.active_requested_deferred_names.clone(),
staged_requested_deferred_names: id.staged_requested_deferred_names.clone(),
active_revision: id.active_revision,
staged_revision: id.staged_revision,
requested_witnesses: id
.requested_witnesses
.iter()
.map(|(k, w)| (k.clone(), ToolVisibilityWitness::from(w)))
.collect(),
filter_witnesses: id
.filter_witnesses
.iter()
.map(|(k, w)| (k.clone(), ToolVisibilityWitness::from(w)))
.collect(),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct SessionLlmCapabilitySurface {
pub supports_temperature: bool,
pub supports_thinking: bool,
pub supports_reasoning: bool,
pub inline_video: bool,
pub vision: bool,
pub image_tool_results: bool,
pub supports_web_search: bool,
pub realtime: bool,
pub call_timeout_secs: Option<u64>,
}
impl From<&crate::meerkat_machine_types::SessionLlmCapabilitySurface>
for SessionLlmCapabilitySurface
{
fn from(s: &crate::meerkat_machine_types::SessionLlmCapabilitySurface) -> Self {
Self {
supports_temperature: s.supports_temperature,
supports_thinking: s.supports_thinking,
supports_reasoning: s.supports_reasoning,
inline_video: s.inline_video,
vision: s.vision,
image_tool_results: s.image_tool_results,
supports_web_search: s.supports_web_search,
realtime: s.realtime,
call_timeout_secs: s.call_timeout_secs,
}
}
}
impl SessionLlmCapabilitySurface {
pub fn from_domain(id: &crate::meerkat_machine_types::SessionLlmCapabilitySurface) -> Self {
Self::from(id)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum SessionLlmCapabilitySurfaceStatus {
Resolved,
#[default]
Unresolved,
}
impl From<crate::meerkat_machine_types::SessionLlmCapabilitySurfaceStatus>
for SessionLlmCapabilitySurfaceStatus
{
fn from(status: crate::meerkat_machine_types::SessionLlmCapabilitySurfaceStatus) -> Self {
match status {
crate::meerkat_machine_types::SessionLlmCapabilitySurfaceStatus::Resolved => {
Self::Resolved
}
crate::meerkat_machine_types::SessionLlmCapabilitySurfaceStatus::Unresolved => {
Self::Unresolved
}
}
}
}
impl From<SessionLlmCapabilitySurfaceStatus>
for crate::meerkat_machine_types::SessionLlmCapabilitySurfaceStatus
{
fn from(status: SessionLlmCapabilitySurfaceStatus) -> Self {
match status {
SessionLlmCapabilitySurfaceStatus::Resolved => Self::Resolved,
SessionLlmCapabilitySurfaceStatus::Unresolved => Self::Unresolved,
}
}
}
impl SessionLlmCapabilitySurfaceStatus {
pub fn from_domain(
id: &crate::meerkat_machine_types::SessionLlmCapabilitySurfaceStatus,
) -> Self {
Self::from(*id)
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct SessionToolVisibilityDelta {
pub previous_capability_base_filter: ToolFilter,
pub current_capability_base_filter: ToolFilter,
pub committed_visible_set_changed: bool,
pub revision_bumped: bool,
}
impl SessionToolVisibilityDelta {
pub fn from_domain(id: &crate::meerkat_machine_types::SessionToolVisibilityDelta) -> Self {
Self {
previous_capability_base_filter: ToolFilter::from(&id.previous_capability_base_filter),
current_capability_base_filter: ToolFilter::from(&id.current_capability_base_filter),
committed_visible_set_changed: id.committed_visible_set_changed,
revision_bumped: id.revision_bumped,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum ToolFilter {
#[default]
All,
Allow(std::collections::BTreeSet<String>),
Deny(std::collections::BTreeSet<String>),
}
impl From<&meerkat_core::ToolFilter> for ToolFilter {
fn from(f: &meerkat_core::ToolFilter) -> Self {
match f {
meerkat_core::ToolFilter::All => Self::All,
meerkat_core::ToolFilter::Allow(names) => {
Self::Allow(names.iter().map(|name| name.as_str().to_string()).collect())
}
meerkat_core::ToolFilter::Deny(names) => {
Self::Deny(names.iter().map(|name| name.as_str().to_string()).collect())
}
}
}
}
impl From<ToolFilter> for meerkat_core::ToolFilter {
fn from(f: ToolFilter) -> Self {
match f {
ToolFilter::All => Self::All,
ToolFilter::Allow(names) => Self::Allow(names.into_iter().collect()),
ToolFilter::Deny(names) => Self::Deny(names.into_iter().collect()),
}
}
}
impl ToolFilter {
pub fn from_domain(id: &meerkat_core::ToolFilter) -> Self {
Self::from(id)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum ToolSourceKind {
#[default]
Builtin,
Shell,
Comms,
Memory,
Schedule,
Mob,
MobTasks,
Callback,
Mcp,
RustBundle,
}
impl From<&meerkat_core::types::ToolSourceKind> for ToolSourceKind {
fn from(k: &meerkat_core::types::ToolSourceKind) -> Self {
match k {
meerkat_core::types::ToolSourceKind::Builtin => Self::Builtin,
meerkat_core::types::ToolSourceKind::Shell => Self::Shell,
meerkat_core::types::ToolSourceKind::Comms => Self::Comms,
meerkat_core::types::ToolSourceKind::Memory => Self::Memory,
meerkat_core::types::ToolSourceKind::Schedule => Self::Schedule,
meerkat_core::types::ToolSourceKind::Mob => Self::Mob,
meerkat_core::types::ToolSourceKind::MobTasks => Self::MobTasks,
meerkat_core::types::ToolSourceKind::Callback => Self::Callback,
meerkat_core::types::ToolSourceKind::Mcp => Self::Mcp,
meerkat_core::types::ToolSourceKind::RustBundle => Self::RustBundle,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct ToolProvenance {
pub kind: ToolSourceKind,
pub source_id: String,
}
impl From<&meerkat_core::types::ToolProvenance> for ToolProvenance {
fn from(p: &meerkat_core::types::ToolProvenance) -> Self {
Self {
kind: ToolSourceKind::from(&p.kind),
source_id: p.source_id.to_string(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct ToolVisibilityWitness {
pub stable_owner_key: Option<String>,
pub last_seen_provenance: Option<ToolProvenance>,
}
impl From<&meerkat_core::ToolVisibilityWitness> for ToolVisibilityWitness {
fn from(w: &meerkat_core::ToolVisibilityWitness) -> Self {
Self {
stable_owner_key: w.stable_owner_key.clone(),
last_seen_provenance: w.last_seen_provenance.as_ref().map(ToolProvenance::from),
}
}
}
impl ToolVisibilityWitness {
pub fn from_domain(id: &meerkat_core::ToolVisibilityWitness) -> Self {
Self::from(id)
}
fn len(&self) -> u64 {
u64::from(self.last_seen_provenance.is_some())
}
}
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Default,
serde::Serialize,
serde::Deserialize,
)]
pub enum RealtimeBindingState {
#[default]
Unbound,
BindingNotReady,
BindingReady,
ReplacementPending,
}
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Default,
serde::Serialize,
serde::Deserialize,
)]
pub enum RealtimeReconnectCycleState {
#[default]
Idle,
Reconnecting,
Exhausted,
}
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Default,
serde::Serialize,
serde::Deserialize,
)]
pub enum RealtimeProductTurnPhase {
#[default]
Idle,
AwaitingProgress,
Committed,
OutputStarted,
Preemptible,
}
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Default,
serde::Serialize,
serde::Deserialize,
)]
pub enum RealtimeProjectionFreshness {
#[default]
Clean,
StaleDeferred,
StaleImmediate,
}
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Default,
serde::Serialize,
serde::Deserialize,
)]
pub enum RealtimeReconnectPolicy {
#[default]
CleanExit,
ReattachAndRecover,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct McpServerId(pub String);
impl<T: Into<String>> From<T> for McpServerId {
fn from(s: T) -> Self {
Self(s.into())
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct PeerCorrelationId(pub String);
impl From<meerkat_core::PeerCorrelationId> for PeerCorrelationId {
fn from(id: meerkat_core::PeerCorrelationId) -> Self {
Self(id.0.to_string())
}
}
impl From<uuid::Uuid> for PeerCorrelationId {
fn from(id: uuid::Uuid) -> Self {
Self(id.to_string())
}
}
impl From<String> for PeerCorrelationId {
fn from(s: String) -> Self {
Self(s)
}
}
impl From<&str> for PeerCorrelationId {
fn from(s: &str) -> Self {
Self(s.to_string())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum OutboundPeerRequestState {
#[default]
Sent,
AcceptedProgress,
Completed,
Failed,
TimedOut,
}
impl From<meerkat_core::OutboundPeerRequestState> for OutboundPeerRequestState {
fn from(s: meerkat_core::OutboundPeerRequestState) -> Self {
match s {
meerkat_core::OutboundPeerRequestState::Sent => Self::Sent,
meerkat_core::OutboundPeerRequestState::AcceptedProgress => Self::AcceptedProgress,
meerkat_core::OutboundPeerRequestState::Completed => Self::Completed,
meerkat_core::OutboundPeerRequestState::Failed => Self::Failed,
meerkat_core::OutboundPeerRequestState::TimedOut => Self::TimedOut,
_ => Self::Sent,
}
}
}
impl From<OutboundPeerRequestState> for meerkat_core::OutboundPeerRequestState {
fn from(s: OutboundPeerRequestState) -> Self {
match s {
OutboundPeerRequestState::Sent => Self::Sent,
OutboundPeerRequestState::AcceptedProgress => Self::AcceptedProgress,
OutboundPeerRequestState::Completed => Self::Completed,
OutboundPeerRequestState::Failed => Self::Failed,
OutboundPeerRequestState::TimedOut => Self::TimedOut,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum InboundPeerRequestState {
#[default]
Received,
Replied,
}
impl From<meerkat_core::InboundPeerRequestState> for InboundPeerRequestState {
fn from(s: meerkat_core::InboundPeerRequestState) -> Self {
match s {
meerkat_core::InboundPeerRequestState::Received => Self::Received,
meerkat_core::InboundPeerRequestState::Replied => Self::Replied,
_ => Self::Received,
}
}
}
impl From<InboundPeerRequestState> for meerkat_core::InboundPeerRequestState {
fn from(s: InboundPeerRequestState) -> Self {
match s {
InboundPeerRequestState::Received => Self::Received,
InboundPeerRequestState::Replied => Self::Replied,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PeerTerminalDisposition {
#[default]
Completed,
Failed,
}
impl From<meerkat_core::handles::PeerTerminalDisposition> for PeerTerminalDisposition {
fn from(d: meerkat_core::handles::PeerTerminalDisposition) -> Self {
match d {
meerkat_core::handles::PeerTerminalDisposition::Completed => Self::Completed,
meerkat_core::handles::PeerTerminalDisposition::Failed => Self::Failed,
_ => Self::Failed,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum InteractionStreamState {
#[default]
Reserved,
Attached,
Completed,
Expired,
ClosedEarly,
}
impl From<meerkat_core::InteractionStreamState> for InteractionStreamState {
fn from(s: meerkat_core::InteractionStreamState) -> Self {
match s {
meerkat_core::InteractionStreamState::Reserved => Self::Reserved,
meerkat_core::InteractionStreamState::Attached => Self::Attached,
meerkat_core::InteractionStreamState::Completed => Self::Completed,
meerkat_core::InteractionStreamState::Expired => Self::Expired,
meerkat_core::InteractionStreamState::ClosedEarly => Self::ClosedEarly,
_ => Self::Reserved,
}
}
}
impl From<InteractionStreamState> for meerkat_core::InteractionStreamState {
fn from(s: InteractionStreamState) -> Self {
match s {
InteractionStreamState::Reserved => Self::Reserved,
InteractionStreamState::Attached => Self::Attached,
InteractionStreamState::Completed => Self::Completed,
InteractionStreamState::Expired => Self::Expired,
InteractionStreamState::ClosedEarly => Self::ClosedEarly,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum McpServerState {
#[default]
PendingConnect,
Connected,
Failed,
Disconnected,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct CommsRuntimeId(pub String);
impl<T: Into<String>> From<T> for CommsRuntimeId {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl CommsRuntimeId {
pub fn from_runtime(runtime: &std::sync::Arc<dyn meerkat_core::agent::CommsRuntime>) -> Self {
let ptr = std::sync::Arc::as_ptr(runtime).cast::<()>() as usize;
Self(format!("comms-runtime-0x{ptr:x}"))
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct MobId(pub String);
impl<T: Into<String>> From<T> for MobId {
fn from(s: T) -> Self {
Self(s.into())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PeerIngressEnvelopeClass {
#[default]
Message,
Request,
Lifecycle,
Response,
Ack,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PeerIngressAdmittedKind {
#[default]
Message,
Request,
Response,
Ack,
PlainEvent,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PeerIngressInputClass {
#[default]
ActionableMessage,
ActionableRequest,
ResponseProgress,
ResponseTerminal,
PeerLifecycleAdded,
PeerLifecycleRetired,
PeerLifecycleUnwired,
SilentRequest,
Ack,
PlainEvent,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PeerIngressLifecycleClass {
#[default]
PeerAdded,
PeerRetired,
PeerUnwired,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PeerIngressAuthClass {
#[default]
Required,
SupervisorBridgeExempt,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PeerIngressResponseStatus {
#[default]
Accepted,
Completed,
Failed,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PeerIngressResponseTerminality {
#[default]
Progress,
TerminalCompleted,
TerminalFailed,
}
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Default,
serde::Serialize,
serde::Deserialize,
)]
pub enum PeerIngressOwnerKind {
#[default]
Unattached,
SessionOwned,
MobOwned,
}
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
Default,
serde::Serialize,
serde::Deserialize,
)]
pub enum SupervisorBindingKind {
#[default]
Unbound,
Bound,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum TurnPhase {
#[default]
Ready,
ApplyingPrimitive,
CallingLlm,
WaitingForOps,
DrainingBoundary,
Extracting,
ErrorRecovery,
Cancelling,
Completed,
Failed,
Cancelled,
}
impl TurnPhase {
pub const fn as_str(self) -> &'static str {
match self {
Self::Ready => "Ready",
Self::ApplyingPrimitive => "ApplyingPrimitive",
Self::CallingLlm => "CallingLlm",
Self::WaitingForOps => "WaitingForOps",
Self::DrainingBoundary => "DrainingBoundary",
Self::Extracting => "Extracting",
Self::ErrorRecovery => "ErrorRecovery",
Self::Cancelling => "Cancelling",
Self::Completed => "Completed",
Self::Failed => "Failed",
Self::Cancelled => "Cancelled",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RegistrationPhase {
#[default]
Queuing,
Active,
}
impl RegistrationPhase {
pub const fn as_str(self) -> &'static str {
match self {
Self::Queuing => "Queuing",
Self::Active => "Active",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum DrainPhase {
#[default]
Inactive,
Running,
Stopped,
ExitedRespawnable,
}
impl DrainPhase {
pub const fn as_str(self) -> &'static str {
match self {
Self::Inactive => "Inactive",
Self::Running => "Running",
Self::Stopped => "Stopped",
Self::ExitedRespawnable => "ExitedRespawnable",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum DrainMode {
#[default]
Timed,
AttachedSession,
PersistentHost,
}
impl DrainMode {
pub const fn as_str(self) -> &'static str {
match self {
Self::Timed => "Timed",
Self::AttachedSession => "AttachedSession",
Self::PersistentHost => "PersistentHost",
}
}
}
impl From<crate::meerkat_machine::CommsDrainMode> for DrainMode {
fn from(mode: crate::meerkat_machine::CommsDrainMode) -> Self {
match mode {
crate::meerkat_machine::CommsDrainMode::Timed => Self::Timed,
crate::meerkat_machine::CommsDrainMode::AttachedSession => Self::AttachedSession,
crate::meerkat_machine::CommsDrainMode::PersistentHost => Self::PersistentHost,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum SurfacePhase {
#[default]
Operating,
Shutdown,
}
impl SurfacePhase {
pub const fn as_str(self) -> &'static str {
match self {
Self::Operating => "Operating",
Self::Shutdown => "Shutdown",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum LiveTopologyPhase {
#[default]
Idle,
Reconfiguring,
Detached,
HostIdentityApplied,
HostVisibilityApplied,
}
impl LiveTopologyPhase {
pub const fn as_str(self) -> &'static str {
match self {
Self::Idle => "Idle",
Self::Reconfiguring => "Reconfiguring",
Self::Detached => "Detached",
Self::HostIdentityApplied => "HostIdentityApplied",
Self::HostVisibilityApplied => "HostVisibilityApplied",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum InputPhase {
#[default]
Queued,
Staged,
Applied,
AppliedPendingConsumption,
Consumed,
Superseded,
Coalesced,
Abandoned,
}
impl InputPhase {
pub const fn as_str(self) -> &'static str {
match self {
Self::Queued => "Queued",
Self::Staged => "Staged",
Self::Applied => "Applied",
Self::AppliedPendingConsumption => "AppliedPendingConsumption",
Self::Consumed => "Consumed",
Self::Superseded => "Superseded",
Self::Coalesced => "Coalesced",
Self::Abandoned => "Abandoned",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum InputTerminalKind {
#[default]
Consumed,
Superseded,
Coalesced,
Abandoned,
}
impl InputTerminalKind {
pub const fn as_str(self) -> &'static str {
match self {
Self::Consumed => "Consumed",
Self::Superseded => "Superseded",
Self::Coalesced => "Coalesced",
Self::Abandoned => "Abandoned",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum SurfacePendingOp {
#[default]
None,
Add,
Reload,
}
impl SurfacePendingOp {
pub const fn as_str(self) -> &'static str {
match self {
Self::None => "None",
Self::Add => "Add",
Self::Reload => "Reload",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum SurfaceStagedOp {
#[default]
None,
Add,
Remove,
Reload,
}
impl SurfaceStagedOp {
pub const fn as_str(self) -> &'static str {
match self {
Self::None => "None",
Self::Add => "Add",
Self::Remove => "Remove",
Self::Reload => "Reload",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum TurnPrimitiveKind {
#[default]
None,
ConversationTurn,
ImmediateAppend,
ImmediateContextAppend,
}
impl From<meerkat_core::turn_execution_authority::TurnPrimitiveKind> for TurnPrimitiveKind {
fn from(kind: meerkat_core::turn_execution_authority::TurnPrimitiveKind) -> Self {
match kind {
meerkat_core::turn_execution_authority::TurnPrimitiveKind::None => Self::None,
meerkat_core::turn_execution_authority::TurnPrimitiveKind::ConversationTurn => {
Self::ConversationTurn
}
meerkat_core::turn_execution_authority::TurnPrimitiveKind::ImmediateAppend => {
Self::ImmediateAppend
}
meerkat_core::turn_execution_authority::TurnPrimitiveKind::ImmediateContextAppend => {
Self::ImmediateContextAppend
}
}
}
}
impl From<TurnPrimitiveKind> for meerkat_core::turn_execution_authority::TurnPrimitiveKind {
fn from(kind: TurnPrimitiveKind) -> Self {
match kind {
TurnPrimitiveKind::None => Self::None,
TurnPrimitiveKind::ConversationTurn => Self::ConversationTurn,
TurnPrimitiveKind::ImmediateAppend => Self::ImmediateAppend,
TurnPrimitiveKind::ImmediateContextAppend => Self::ImmediateContextAppend,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum ContentShape {
#[default]
Conversation,
ConversationAndContext,
Context,
Empty,
ImmediateAppend,
ImmediateContext,
}
impl ContentShape {
pub const fn as_str(self) -> &'static str {
match self {
Self::Conversation => {
meerkat_core::turn_execution_authority::ContentShape::Conversation.as_str()
}
Self::ConversationAndContext => {
meerkat_core::turn_execution_authority::ContentShape::ConversationAndContext
.as_str()
}
Self::Context => meerkat_core::turn_execution_authority::ContentShape::Context.as_str(),
Self::Empty => meerkat_core::turn_execution_authority::ContentShape::Empty.as_str(),
Self::ImmediateAppend => {
meerkat_core::turn_execution_authority::ContentShape::ImmediateAppend.as_str()
}
Self::ImmediateContext => {
meerkat_core::turn_execution_authority::ContentShape::ImmediateContext.as_str()
}
}
}
}
impl std::fmt::Display for ContentShape {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
impl From<meerkat_core::turn_execution_authority::ContentShape> for ContentShape {
fn from(shape: meerkat_core::turn_execution_authority::ContentShape) -> Self {
match shape {
meerkat_core::turn_execution_authority::ContentShape::Conversation => {
Self::Conversation
}
meerkat_core::turn_execution_authority::ContentShape::ConversationAndContext => {
Self::ConversationAndContext
}
meerkat_core::turn_execution_authority::ContentShape::Context => Self::Context,
meerkat_core::turn_execution_authority::ContentShape::Empty => Self::Empty,
meerkat_core::turn_execution_authority::ContentShape::ImmediateAppend => {
Self::ImmediateAppend
}
meerkat_core::turn_execution_authority::ContentShape::ImmediateContext => {
Self::ImmediateContext
}
}
}
}
impl From<ContentShape> for meerkat_core::turn_execution_authority::ContentShape {
fn from(shape: ContentShape) -> Self {
match shape {
ContentShape::Conversation => Self::Conversation,
ContentShape::ConversationAndContext => Self::ConversationAndContext,
ContentShape::Context => Self::Context,
ContentShape::Empty => Self::Empty,
ContentShape::ImmediateAppend => Self::ImmediateAppend,
ContentShape::ImmediateContext => Self::ImmediateContext,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum TurnTerminalOutcome {
#[default]
None,
Completed,
Failed,
Cancelled,
BudgetExhausted,
TimeBudgetExceeded,
StructuredOutputValidationFailed,
}
impl From<meerkat_core::turn_execution_authority::TurnTerminalOutcome> for TurnTerminalOutcome {
fn from(outcome: meerkat_core::turn_execution_authority::TurnTerminalOutcome) -> Self {
match outcome {
meerkat_core::turn_execution_authority::TurnTerminalOutcome::None => Self::None,
meerkat_core::turn_execution_authority::TurnTerminalOutcome::Completed => {
Self::Completed
}
meerkat_core::turn_execution_authority::TurnTerminalOutcome::Failed => Self::Failed,
meerkat_core::turn_execution_authority::TurnTerminalOutcome::Cancelled => {
Self::Cancelled
}
meerkat_core::turn_execution_authority::TurnTerminalOutcome::BudgetExhausted => {
Self::BudgetExhausted
}
meerkat_core::turn_execution_authority::TurnTerminalOutcome::TimeBudgetExceeded => {
Self::TimeBudgetExceeded
}
meerkat_core::turn_execution_authority::TurnTerminalOutcome::StructuredOutputValidationFailed => {
Self::StructuredOutputValidationFailed
}
}
}
}
impl From<TurnTerminalOutcome> for meerkat_core::turn_execution_authority::TurnTerminalOutcome {
fn from(outcome: TurnTerminalOutcome) -> Self {
match outcome {
TurnTerminalOutcome::None => Self::None,
TurnTerminalOutcome::Completed => Self::Completed,
TurnTerminalOutcome::Failed => Self::Failed,
TurnTerminalOutcome::Cancelled => Self::Cancelled,
TurnTerminalOutcome::BudgetExhausted => Self::BudgetExhausted,
TurnTerminalOutcome::TimeBudgetExceeded => Self::TimeBudgetExceeded,
TurnTerminalOutcome::StructuredOutputValidationFailed => {
Self::StructuredOutputValidationFailed
}
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum TurnTerminalCauseKind {
#[default]
Unknown,
HookDenied,
HookFailure,
LlmFailure,
ToolFailure,
StructuredOutputValidationFailed,
BudgetExhausted,
TimeBudgetExceeded,
RetryExhausted,
TurnLimitReached,
RuntimeApplyFailure,
FatalFailure,
}
impl From<meerkat_core::turn_execution_authority::TurnTerminalCauseKind> for TurnTerminalCauseKind {
fn from(kind: meerkat_core::turn_execution_authority::TurnTerminalCauseKind) -> Self {
match kind {
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::Unknown => {
Self::Unknown
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::HookDenied => {
Self::HookDenied
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::HookFailure => {
Self::HookFailure
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::LlmFailure => {
Self::LlmFailure
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::ToolFailure => {
Self::ToolFailure
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::StructuredOutputValidationFailed => {
Self::StructuredOutputValidationFailed
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::BudgetExhausted => {
Self::BudgetExhausted
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::TimeBudgetExceeded => {
Self::TimeBudgetExceeded
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::RetryExhausted => {
Self::RetryExhausted
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::TurnLimitReached => {
Self::TurnLimitReached
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::RuntimeApplyFailure => {
Self::RuntimeApplyFailure
}
meerkat_core::turn_execution_authority::TurnTerminalCauseKind::FatalFailure => {
Self::FatalFailure
}
}
}
}
impl From<TurnTerminalCauseKind> for meerkat_core::turn_execution_authority::TurnTerminalCauseKind {
fn from(kind: TurnTerminalCauseKind) -> Self {
match kind {
TurnTerminalCauseKind::Unknown => Self::Unknown,
TurnTerminalCauseKind::HookDenied => Self::HookDenied,
TurnTerminalCauseKind::HookFailure => Self::HookFailure,
TurnTerminalCauseKind::LlmFailure => Self::LlmFailure,
TurnTerminalCauseKind::ToolFailure => Self::ToolFailure,
TurnTerminalCauseKind::StructuredOutputValidationFailed => {
Self::StructuredOutputValidationFailed
}
TurnTerminalCauseKind::BudgetExhausted => Self::BudgetExhausted,
TurnTerminalCauseKind::TimeBudgetExceeded => Self::TimeBudgetExceeded,
TurnTerminalCauseKind::RetryExhausted => Self::RetryExhausted,
TurnTerminalCauseKind::TurnLimitReached => Self::TurnLimitReached,
TurnTerminalCauseKind::RuntimeApplyFailure => Self::RuntimeApplyFailure,
TurnTerminalCauseKind::FatalFailure => Self::FatalFailure,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RuntimeApplyFailureCause {
#[default]
Unknown,
PrimitiveRejected,
RuntimeContextApply,
RuntimeTurn,
HookDenied,
HookRuntimeFailure,
ExecutorStopped,
ExecutorControlFailed,
ExecutorInternal,
}
impl From<meerkat_core::lifecycle::CoreApplyFailureCauseKind> for RuntimeApplyFailureCause {
fn from(kind: meerkat_core::lifecycle::CoreApplyFailureCauseKind) -> Self {
match kind {
meerkat_core::lifecycle::CoreApplyFailureCauseKind::PrimitiveRejected => {
Self::PrimitiveRejected
}
meerkat_core::lifecycle::CoreApplyFailureCauseKind::RuntimeContextApply => {
Self::RuntimeContextApply
}
meerkat_core::lifecycle::CoreApplyFailureCauseKind::RuntimeTurn => Self::RuntimeTurn,
meerkat_core::lifecycle::CoreApplyFailureCauseKind::HookDenied => Self::HookDenied,
meerkat_core::lifecycle::CoreApplyFailureCauseKind::HookRuntimeFailure => {
Self::HookRuntimeFailure
}
meerkat_core::lifecycle::CoreApplyFailureCauseKind::ExecutorStopped => {
Self::ExecutorStopped
}
meerkat_core::lifecycle::CoreApplyFailureCauseKind::ExecutorControlFailed => {
Self::ExecutorControlFailed
}
meerkat_core::lifecycle::CoreApplyFailureCauseKind::ExecutorInternal => {
Self::ExecutorInternal
}
meerkat_core::lifecycle::CoreApplyFailureCauseKind::Unknown => Self::Unknown,
_ => Self::Unknown,
}
}
}
impl From<&meerkat_core::lifecycle::CoreApplyFailureCause> for RuntimeApplyFailureCause {
fn from(cause: &meerkat_core::lifecycle::CoreApplyFailureCause) -> Self {
Self::from(cause.kind)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PreRunPhase {
#[default]
Idle,
Attached,
Retired,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RuntimeNoticeKind {
#[default]
Drain,
Reset,
Stop,
Exit,
Recover,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RuntimeEffectKind {
#[default]
CancelAfterBoundary,
StopRuntimeExecutor,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum TurnCancellationReason {
#[default]
Observed,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum LlmRetryFailureKind {
#[default]
RateLimited,
NetworkTimeout,
CallTimeout,
RetryableProviderError,
}
impl From<meerkat_core::retry::LlmRetryFailureKind> for LlmRetryFailureKind {
fn from(kind: meerkat_core::retry::LlmRetryFailureKind) -> Self {
match kind {
meerkat_core::retry::LlmRetryFailureKind::RateLimited => Self::RateLimited,
meerkat_core::retry::LlmRetryFailureKind::NetworkTimeout => Self::NetworkTimeout,
meerkat_core::retry::LlmRetryFailureKind::CallTimeout => Self::CallTimeout,
meerkat_core::retry::LlmRetryFailureKind::RetryableProviderError => {
Self::RetryableProviderError
}
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum PostAdmissionSignalKind {
#[default]
WakeLoop,
InterruptYielding,
RequestImmediateProcessing,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum ExternalToolSurfaceBaseState {
#[default]
Absent,
Active,
Removing,
Removed,
}
impl From<meerkat_core::tool_scope::ExternalToolSurfaceBaseState> for ExternalToolSurfaceBaseState {
fn from(state: meerkat_core::tool_scope::ExternalToolSurfaceBaseState) -> Self {
match state {
meerkat_core::tool_scope::ExternalToolSurfaceBaseState::Absent => Self::Absent,
meerkat_core::tool_scope::ExternalToolSurfaceBaseState::Active => Self::Active,
meerkat_core::tool_scope::ExternalToolSurfaceBaseState::Removing => Self::Removing,
meerkat_core::tool_scope::ExternalToolSurfaceBaseState::Removed => Self::Removed,
}
}
}
impl From<ExternalToolSurfaceBaseState> for meerkat_core::tool_scope::ExternalToolSurfaceBaseState {
fn from(state: ExternalToolSurfaceBaseState) -> Self {
match state {
ExternalToolSurfaceBaseState::Absent => Self::Absent,
ExternalToolSurfaceBaseState::Active => Self::Active,
ExternalToolSurfaceBaseState::Removing => Self::Removing,
ExternalToolSurfaceBaseState::Removed => Self::Removed,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum ExternalToolSurfaceDeltaOperation {
#[default]
None,
Add,
Remove,
Reload,
}
impl From<meerkat_core::tool_scope::ExternalToolSurfaceDeltaOperation>
for ExternalToolSurfaceDeltaOperation
{
fn from(op: meerkat_core::tool_scope::ExternalToolSurfaceDeltaOperation) -> Self {
match op {
meerkat_core::tool_scope::ExternalToolSurfaceDeltaOperation::None => Self::None,
meerkat_core::tool_scope::ExternalToolSurfaceDeltaOperation::Add => Self::Add,
meerkat_core::tool_scope::ExternalToolSurfaceDeltaOperation::Remove => Self::Remove,
meerkat_core::tool_scope::ExternalToolSurfaceDeltaOperation::Reload => Self::Reload,
}
}
}
impl From<ExternalToolSurfaceDeltaOperation>
for meerkat_core::tool_scope::ExternalToolSurfaceDeltaOperation
{
fn from(op: ExternalToolSurfaceDeltaOperation) -> Self {
match op {
ExternalToolSurfaceDeltaOperation::None => Self::None,
ExternalToolSurfaceDeltaOperation::Add => Self::Add,
ExternalToolSurfaceDeltaOperation::Remove => Self::Remove,
ExternalToolSurfaceDeltaOperation::Reload => Self::Reload,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum ExternalToolSurfaceDeltaPhase {
#[default]
None,
Pending,
Applied,
Draining,
Failed,
Forced,
}
impl From<meerkat_core::tool_scope::ExternalToolSurfaceDeltaPhase>
for ExternalToolSurfaceDeltaPhase
{
fn from(phase: meerkat_core::tool_scope::ExternalToolSurfaceDeltaPhase) -> Self {
match phase {
meerkat_core::tool_scope::ExternalToolSurfaceDeltaPhase::None => Self::None,
meerkat_core::tool_scope::ExternalToolSurfaceDeltaPhase::Pending => Self::Pending,
meerkat_core::tool_scope::ExternalToolSurfaceDeltaPhase::Applied => Self::Applied,
meerkat_core::tool_scope::ExternalToolSurfaceDeltaPhase::Draining => Self::Draining,
meerkat_core::tool_scope::ExternalToolSurfaceDeltaPhase::Failed => Self::Failed,
meerkat_core::tool_scope::ExternalToolSurfaceDeltaPhase::Forced => Self::Forced,
}
}
}
impl From<ExternalToolSurfaceDeltaPhase>
for meerkat_core::tool_scope::ExternalToolSurfaceDeltaPhase
{
fn from(phase: ExternalToolSurfaceDeltaPhase) -> Self {
match phase {
ExternalToolSurfaceDeltaPhase::None => Self::None,
ExternalToolSurfaceDeltaPhase::Pending => Self::Pending,
ExternalToolSurfaceDeltaPhase::Applied => Self::Applied,
ExternalToolSurfaceDeltaPhase::Draining => Self::Draining,
ExternalToolSurfaceDeltaPhase::Failed => Self::Failed,
ExternalToolSurfaceDeltaPhase::Forced => Self::Forced,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum ExternalToolSurfaceFailureCause {
#[default]
PendingFailed,
SurfaceDraining,
SurfaceUnavailable,
}
impl From<meerkat_core::tool_scope::ExternalToolSurfaceFailureCause>
for ExternalToolSurfaceFailureCause
{
fn from(cause: meerkat_core::tool_scope::ExternalToolSurfaceFailureCause) -> Self {
match cause {
meerkat_core::tool_scope::ExternalToolSurfaceFailureCause::PendingFailed => {
Self::PendingFailed
}
meerkat_core::tool_scope::ExternalToolSurfaceFailureCause::SurfaceDraining => {
Self::SurfaceDraining
}
meerkat_core::tool_scope::ExternalToolSurfaceFailureCause::SurfaceUnavailable => {
Self::SurfaceUnavailable
}
}
}
}
impl From<ExternalToolSurfaceFailureCause>
for meerkat_core::tool_scope::ExternalToolSurfaceFailureCause
{
fn from(cause: ExternalToolSurfaceFailureCause) -> Self {
match cause {
ExternalToolSurfaceFailureCause::PendingFailed => Self::PendingFailed,
ExternalToolSurfaceFailureCause::SurfaceDraining => Self::SurfaceDraining,
ExternalToolSurfaceFailureCause::SurfaceUnavailable => Self::SurfaceUnavailable,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum DrainExitReason {
#[default]
IdleTimeout,
Dismissed,
Failed,
Aborted,
SessionShutdown,
}
impl From<meerkat_core::handles::DrainExitReason> for DrainExitReason {
fn from(reason: meerkat_core::handles::DrainExitReason) -> Self {
match reason {
meerkat_core::handles::DrainExitReason::IdleTimeout => Self::IdleTimeout,
meerkat_core::handles::DrainExitReason::Dismissed => Self::Dismissed,
meerkat_core::handles::DrainExitReason::Failed => Self::Failed,
meerkat_core::handles::DrainExitReason::Aborted => Self::Aborted,
meerkat_core::handles::DrainExitReason::SessionShutdown => Self::SessionShutdown,
}
}
}
impl From<DrainExitReason> for meerkat_core::handles::DrainExitReason {
fn from(reason: DrainExitReason) -> Self {
match reason {
DrainExitReason::IdleTimeout => Self::IdleTimeout,
DrainExitReason::Dismissed => Self::Dismissed,
DrainExitReason::Failed => Self::Failed,
DrainExitReason::Aborted => Self::Aborted,
DrainExitReason::SessionShutdown => Self::SessionShutdown,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum WorkOrigin {
#[default]
External,
Internal,
Ingest,
}
impl From<meerkat_core::comms::InputSource> for WorkOrigin {
fn from(src: meerkat_core::comms::InputSource) -> Self {
match src {
meerkat_core::comms::InputSource::Tcp
| meerkat_core::comms::InputSource::Uds
| meerkat_core::comms::InputSource::Stdin
| meerkat_core::comms::InputSource::Webhook
| meerkat_core::comms::InputSource::Rpc => Self::External,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum OperationStatus {
#[default]
Absent,
Provisioning,
Running,
Retiring,
Completed,
Failed,
Aborted,
Cancelled,
Retired,
Terminated,
}
impl From<meerkat_core::ops_lifecycle::OperationStatus> for OperationStatus {
fn from(status: meerkat_core::ops_lifecycle::OperationStatus) -> Self {
match status {
meerkat_core::ops_lifecycle::OperationStatus::Absent => Self::Absent,
meerkat_core::ops_lifecycle::OperationStatus::Provisioning => Self::Provisioning,
meerkat_core::ops_lifecycle::OperationStatus::Running => Self::Running,
meerkat_core::ops_lifecycle::OperationStatus::Retiring => Self::Retiring,
meerkat_core::ops_lifecycle::OperationStatus::Completed => Self::Completed,
meerkat_core::ops_lifecycle::OperationStatus::Failed => Self::Failed,
meerkat_core::ops_lifecycle::OperationStatus::Aborted => Self::Aborted,
meerkat_core::ops_lifecycle::OperationStatus::Cancelled => Self::Cancelled,
meerkat_core::ops_lifecycle::OperationStatus::Retired => Self::Retired,
meerkat_core::ops_lifecycle::OperationStatus::Terminated => Self::Terminated,
}
}
}
impl From<OperationStatus> for meerkat_core::ops_lifecycle::OperationStatus {
fn from(status: OperationStatus) -> Self {
match status {
OperationStatus::Absent => Self::Absent,
OperationStatus::Provisioning => Self::Provisioning,
OperationStatus::Running => Self::Running,
OperationStatus::Retiring => Self::Retiring,
OperationStatus::Completed => Self::Completed,
OperationStatus::Failed => Self::Failed,
OperationStatus::Aborted => Self::Aborted,
OperationStatus::Cancelled => Self::Cancelled,
OperationStatus::Retired => Self::Retired,
OperationStatus::Terminated => Self::Terminated,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum OperationTerminalOutcomeKind {
#[default]
Completed,
Failed,
Aborted,
Cancelled,
Retired,
Terminated,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum InputAbandonReason {
#[default]
Retired,
Reset,
Stopped,
Destroyed,
Cancelled,
MaxAttemptsExhausted,
}
impl From<&crate::input_state::InputAbandonReason> for InputAbandonReason {
fn from(reason: &crate::input_state::InputAbandonReason) -> Self {
match reason {
crate::input_state::InputAbandonReason::Retired => Self::Retired,
crate::input_state::InputAbandonReason::Reset => Self::Reset,
crate::input_state::InputAbandonReason::Stopped => Self::Stopped,
crate::input_state::InputAbandonReason::Destroyed => Self::Destroyed,
crate::input_state::InputAbandonReason::Cancelled => Self::Cancelled,
crate::input_state::InputAbandonReason::MaxAttemptsExhausted { .. } => {
Self::MaxAttemptsExhausted
}
}
}
}
impl InputAbandonReason {
pub const fn as_str(self) -> &'static str {
match self {
Self::Retired => "retired",
Self::Reset => "reset",
Self::Stopped => "stopped",
Self::Destroyed => "destroyed",
Self::Cancelled => "cancelled",
Self::MaxAttemptsExhausted => "max_attempts_exhausted",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum InputLane {
#[default]
Queue,
Steer,
}
impl From<crate::HandlingMode> for InputLane {
fn from(mode: crate::HandlingMode) -> Self {
match mode {
crate::HandlingMode::Queue => Self::Queue,
crate::HandlingMode::Steer => Self::Steer,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RoutingSwitchTurnPhase {
#[default]
Requested,
PendingForBoundary,
ActiveFiniteOverride,
ApplyingPersistentReconfigure,
Terminal,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RoutingSwitchTurnTerminal {
#[default]
Denied,
ConsumedAndRestored,
PersistentReconfigureApplied,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RoutingDenialReason {
#[default]
CapabilityPolicy,
ApprovalRequiredButUnavailable,
DeniedDuringApproval,
ScopedOverrideConflict,
RealtimeTransportConflict,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RoutingApprovalPhase {
#[default]
Pending,
PresentedToUser,
Approved,
Denied,
SurfaceDetached,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RoutingApprovalParentKind {
#[default]
SwitchTurn,
ImageOperation,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RoutingImageOperationPhase {
#[default]
Requested,
PlanResolved,
ScopedOverrideActive,
ProviderCallInFlight,
ResultCommitted,
RestoringScopedOverride,
Terminal,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum RoutingImageTerminal {
#[default]
Generated,
Denied,
EmptyResult,
RefusedByProvider,
SafetyFiltered,
Failed,
Cancelled,
Timeout,
ScopedRestoreFailed,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct PeerEndpoint {
pub name: PeerName,
pub peer_id: PeerId,
pub address: PeerAddress,
pub signing_key: PeerSigningKey,
}
impl PeerEndpoint {
pub fn new(
name: impl Into<PeerName>,
peer_id: impl Into<PeerId>,
address: impl Into<PeerAddress>,
signing_key: impl Into<PeerSigningKey>,
) -> Self {
Self {
name: name.into(),
peer_id: peer_id.into(),
address: address.into(),
signing_key: signing_key.into(),
}
}
}
impl From<&meerkat_core::comms::TrustedPeerDescriptor> for PeerEndpoint {
fn from(spec: &meerkat_core::comms::TrustedPeerDescriptor) -> Self {
Self {
name: PeerName(spec.name.as_str().to_owned()),
peer_id: PeerId(spec.peer_id.to_string()),
address: PeerAddress(spec.address.to_string()),
signing_key: PeerSigningKey(spec.pubkey),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct PeerSigningKey(pub [u8; 32]);
impl From<[u8; 32]> for PeerSigningKey {
fn from(key: [u8; 32]) -> Self {
Self(key)
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct PeerName(pub String);
impl<T: Into<String>> From<T> for PeerName {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl PeerName {
pub fn as_str(&self) -> &str {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct PeerId(pub String);
impl<T: Into<String>> From<T> for PeerId {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl PeerId {
pub fn as_str(&self) -> &str {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub struct PeerAddress(pub String);
impl<T: Into<String>> From<T> for PeerAddress {
fn from(s: T) -> Self {
Self(s.into())
}
}
impl PeerAddress {
pub fn as_str(&self) -> &str {
&self.0
}
}
meerkat_machine_schema::meerkat_catalog_machine_dsl!("meerkat-runtime", "meerkat_machine::dsl");