#[non_exhaustive]pub enum Capability {
Show 16 variants
GracefulShutdown,
UpdateTracking,
SoftwareDiscovery,
SshRemote,
UpdateHooks,
Scheduler,
DatabaseAccess,
NatsAccess,
MasterKeyAccess,
CaManagement,
SystemService,
UiSurfaces,
InteractiveUpdates,
ResetData,
WorkloadClaims,
Other(String),
}Expand description
A protocol capability advertised by a service or controller during connection setup.
Both sides announce their capability sets at the start of each authenticated
connection. Each side independently computes the agreed set as the intersection
of typed variants only — Other is excluded from intersection.
§Wire format
Capabilities are serialized as plain strings (snake_case). Unknown strings from
a newer peer become Other(String) for forward compatibility.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
GracefulShutdown
Service participates in the graceful-shutdown protocol: sends
Disconnecting before clean exit and honours
shutdown_timeout_seconds from ServiceSettings.
Wire string: graceful_shutdown.
UpdateTracking
Service tracks software update state and host connectivity.
The controller uses this capability to route software-state broadcasts and connectivity updates. Also gates MQTT-specific lease coordination for MQTT bridge services.
Wire string: update_tracking.
SoftwareDiscovery
Service supports DiscoverSoftware → DiscoveryResults flow.
The controller gates autodiscovery requests on this capability.
Wire string: software_discovery.
SshRemote
Service manages remote hosts over SSH, rather than running locally.
Identifies an SSH-backed agent. Combined with SoftwareDiscovery,
uniquely identifies an SSH agent (vs. a local agent).
Wire string: ssh_remote.
UpdateHooks
Service supports pre-/post-update lifecycle hook plugins
(PluginAssignment in ExecuteUpdatePayload). The controller omits
hook plugins when absent.
Wire string: update_hooks.
Scheduler
Marker: service is an external task scheduler.
Identifies a service that runs scheduled tasks (version checks, cert checks, auth cleanup, etc.) externally. The controller uses this to detect scheduler presence and disable the embedded scheduler.
Wire string: scheduler.
DatabaseAccess
Service requires direct database access. The controller will include
db_url in ServiceCredentialsPayload.
Wire string: database_access.
NatsAccess
Service requires NATS access. The controller will include nats_url
in ServiceCredentialsPayload (if NATS is configured).
Wire string: nats_access.
MasterKeyAccess
Service requires the master encryption key. The controller will include
master_key_hex in ServiceCredentialsPayload (if encryption is enabled).
Wire string: master_key_access.
CaManagement
Service can request CA certificate rotation via RequestCaRotationPayload.
The controller will accept RequestCaRotation messages from services
with this capability (via NATS or local delivery).
Wire string: ca_management.
SystemService
Service is a global infrastructure service, not bound to any tenant.
When present in an EnrollPayload, the controller routes enrollment to
the system_services table instead of the per-tenant services table.
Credential guard: any service requesting DatabaseAccess,
NatsAccess, MasterKeyAccess, or CaManagement without also
advertising SystemService will be rejected at enrollment with a 403
error. This prevents regular tenant agents from claiming infrastructure
credentials.
Wire string: system_service.
UiSurfaces
Service supports UI surfaces: it will send SurfaceRegistration after
connection and respond to surface action messages.
Wire string: ui_surfaces.
InteractiveUpdates
Service supports interactive update sessions: PTY allocation, stdin forwarding, and signal delivery during update execution.
When present, the controller may set interactive: true on
ExecuteUpdatePayload and send UpdateStdinData messages to this
service. The service allocates a PTY for the update process and keeps
stdin open for forwarding.
Wire string: interactive_updates.
ResetData
Service supports the reset-data protocol: truncates local data stores when the controller broadcasts a data reset.
Wire string: reset_data.
WorkloadClaims
Service participates in the workload claim protocol for exclusive config-key ownership.
Services with this capability send WorkloadClaim after receiving
ServiceConfigDelivery to request exclusive ownership of config keys.
The controller responds with WorkloadClaimResult and routes
tenant-scoped messages only to services that hold granted claims.
Wire string: workload_claims.
Other(String)
Unknown capability from a newer peer; never participates in intersection.
Provides forward compatibility: a newer peer may advertise capabilities that an older build does not yet recognise. These are preserved on receipt but never emitted by the current codebase.
Implementations§
Source§impl Capability
impl Capability
Trait Implementations§
Source§impl Clone for Capability
impl Clone for Capability
Source§fn clone(&self) -> Capability
fn clone(&self) -> Capability
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Capability
impl Debug for Capability
Source§impl<'de> Deserialize<'de> for Capability
impl<'de> Deserialize<'de> for Capability
Source§fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
Source§impl Display for Capability
impl Display for Capability
impl Eq for Capability
Source§impl FromStr for Capability
impl FromStr for Capability
Source§impl Hash for Capability
impl Hash for Capability
Source§impl Ord for Capability
impl Ord for Capability
Source§fn cmp(&self, other: &Capability) -> Ordering
fn cmp(&self, other: &Capability) -> Ordering
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for Capability
impl PartialEq for Capability
Source§impl PartialOrd for Capability
impl PartialOrd for Capability
Source§impl Serialize for Capability
impl Serialize for Capability
impl StructuralPartialEq for Capability
Auto Trait Implementations§
impl Freeze for Capability
impl RefUnwindSafe for Capability
impl Send for Capability
impl Sync for Capability
impl Unpin for Capability
impl UnsafeUnpin for Capability
impl UnwindSafe for Capability
Blanket Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.