Skip to main content

SlackConfig

Struct SlackConfig 

pub struct SlackConfig {
Show 17 fields pub enabled: bool, pub bot_token: Option<String>, pub app_token: Option<String>, pub channel_ids: Vec<String>, pub interrupt_on_new_message: bool, pub thread_replies: Option<bool>, pub mention_only: bool, pub strict_mention_in_thread: bool, pub use_markdown_blocks: bool, pub proxy_url: Option<String>, pub stream_drafts: bool, pub draft_update_interval_ms: u64, pub cancel_reaction: Option<String>, pub approval_timeout_secs: u64, pub excluded_tools: Vec<String>, pub reply_min_interval_secs: u64, pub reply_queue_depth_max: u16,
}
Expand description

Slack bot channel configuration.

Fields§

§enabled: bool

Whether this channel is active. The runtime only loads channels whose enabled = true. Default: false so an operator who pastes a partial [channels.<type>.<alias>] block doesn’t accidentally bring a channel live before the rest of its config is filled in.

§bot_token: Option<String>

Slack bot OAuth token (xoxb-…). Optional in config: when unset or empty it is resolved at channel construction from ZEROCLAW_SLACK_BOT_TOKEN, then SLACK_BOT_TOKEN. #[serde(default)] so a config that omits it still deserializes - the env fallback then supplies it - instead of failing with missing field 'bot_token'.

§app_token: Option<String>

Slack app-level token for Socket Mode (xapp-…). When unset or empty, resolved at channel construction from ZEROCLAW_SLACK_APP_TOKEN, then SLACK_APP_TOKEN. #[serde(default)] makes omission explicit (an Option field is already omittable, but this keeps it consistent with bot_token).

§channel_ids: Vec<String>

Explicit list of channel IDs to watch. Empty = listen across all accessible channels. Migrated from the legacy channel_id singular field.

§interrupt_on_new_message: bool

When true, a newer Slack message from the same sender in the same channel cancels the in-flight request and starts a fresh response with preserved history.

§thread_replies: Option<bool>

When true (default), replies stay in the originating Slack thread. When false, replies go to the channel root instead.

§mention_only: bool

When true, only respond to messages that @-mention the bot in groups. Direct messages remain allowed.

§strict_mention_in_thread: bool

When true (and mention_only is also true), messages inside a Slack thread must also @-mention the bot to trigger a response. By default, thread replies are allowed through without a mention so the bot can keep a back-and-forth going without the user repeating @-mentions. Set this to true in channels shared with human discussion where the bot should stay silent unless explicitly addressed.

§use_markdown_blocks: bool

Use the newer Slack markdown block type (12 000 char limit, richer formatting). Defaults to false (uses universally supported section blocks with mrkdwn). Enable this only if your Slack workspace supports the markdown block type.

§proxy_url: Option<String>

Per-channel proxy URL (http, https, socks5, socks5h). Overrides the global [proxy] setting for this channel only.

§stream_drafts: bool

Enable progressive draft message streaming via chat.update.

§draft_update_interval_ms: u64

Minimum interval (ms) between draft message edits to avoid Slack rate limits.

§cancel_reaction: Option<String>

Emoji reaction name (without colons) that cancels an in-flight request. For example, "x" means reacting with :x: cancels the task. Leave unset to disable reaction-based cancellation.

§approval_timeout_secs: u64

Seconds to wait for operator approval on always_ask tools before auto-denying.

§excluded_tools: Vec<String>

Tools excluded from this channel’s tool spec. When set, these tools are not exposed to the model when responding via this channel.

§reply_min_interval_secs: u64

Per-(channel, recipient) outbound pacing floor in seconds. Range: 0..=REPLY_MIN_INTERVAL_MAX_SECS (0 disables).

§reply_queue_depth_max: u16

Per-(channel, recipient) outbound pacing queue depth. Range: 0..=REPLY_QUEUE_DEPTH_CEILING. When reply_min_interval_secs > 0 and this value is 0, the pacing wrapper substitutes DEFAULT_REPLY_QUEUE_DEPTH (16). When the queue is full, the newest send is dropped and a WARN is logged.

Implementations§

Source§

impl SlackConfig

Source

pub fn configurable_prefix() -> &'static str

Returns the #[prefix] value for this Configurable struct.

Source

pub fn secret_fields(&self) -> Vec<SecretFieldInfo>

Returns metadata about all #[secret] fields on this struct and nested children.

Source

pub fn secret_field_terminals() -> Vec<&'static str>

Source

pub fn encrypt_secrets(&mut self, store: &SecretStore) -> Result<()>

Encrypt all secret fields in place using the provided store.

Source

pub fn decrypt_secrets(&mut self, store: &SecretStore) -> Result<()>

Decrypt all secret fields in place using the provided store.

Source

pub fn set_secret(&mut self, name: &str, value: String) -> Result<()>

Set a secret field by its full dotted name, dispatching to nested children.

Source

pub fn prop_fields(&self) -> Vec<PropFieldInfo>

Returns metadata about all property fields on this struct and nested children.

Source

pub fn get_prop(&self, name: &str) -> Result<String>

Get a property value by its full dotted name, returning it as a display string.

Source

pub fn set_prop(&mut self, name: &str, value_str: &str) -> Result<()>

Set a property value by its full dotted name, parsing from string.

Source

pub fn prop_is_secret(name: &str) -> bool

Check if a property name refers to a secret field (static, no instance needed).

Source

pub fn init_defaults(&mut self, prefix: Option<&str>) -> Vec<&'static str>

Instantiate None nested sections whose prefix matches. Returns the prefixes that were initialized.

Source

pub fn map_key_sections() -> Vec<MapKeySection>

Enumerate every map-keyed (HashMap<String, T>) and list-shaped (Vec<T>) section discoverable from this Configurable’s tree. The dashboard / CLI consume this to surface “+ Add” affordances without hardcoding the section list.

Source

pub fn nested_section_help(name: &str) -> Option<&'static str>

Help blurb for a #[nested] field on this struct, sourced from the field-level /// docstring. Returns None for unknown names so callers can fall through to a different lookup.

Source

pub fn nested_section_group(name: &str) -> Option<&'static str>

Source

pub fn get_map_keys(&self, section_path: &str) -> Option<Vec<String>>

Return the current alias keys at section_path, or None if the path doesn’t resolve to a map-keyed section in this tree.

Source

pub fn nested_option_entries(&self) -> Vec<NestedOptionEntry>

Source

pub fn create_map_key( &mut self, section_path: &str, map_key: &str, ) -> Result<bool, String>

Source

pub fn delete_map_key( &mut self, section_path: &str, map_key: &str, ) -> Result<bool, String>

Source

pub fn rename_map_key( &mut self, section_path: &str, map_key: &str, new_key: &str, ) -> Result<bool, String>

Source§

impl SlackConfig

Source

pub fn resolved_bot_token(&self) -> Option<String>

Resolve the effective Slack bot token: the configured bot_token when set and non-empty, else the ZEROCLAW_SLACK_BOT_TOKEN env var, else SLACK_BOT_TOKEN. Returns None when none is available. Resolving here (rather than writing the env value back into the config struct) keeps an env-supplied secret out of any config that might later be persisted to disk.

Source

pub fn resolved_app_token(&self) -> Option<String>

Resolve the effective Slack app-level (Socket Mode) token: configured app_token when set and non-empty, else ZEROCLAW_SLACK_APP_TOKEN, else SLACK_APP_TOKEN. Returns None when none is available.

Trait Implementations§

Source§

impl ChannelConfig for SlackConfig

Source§

fn name() -> &'static str

human-readable name
Source§

fn desc() -> &'static str

short description
Source§

impl Clone for SlackConfig

Source§

fn clone(&self) -> SlackConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · §

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

Performs copy-assignment from source. Read more
Source§

impl Debug for SlackConfig

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for SlackConfig

Source§

fn default() -> SlackConfig

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for SlackConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl HasReplyPacing for SlackConfig

Source§

impl JsonSchema for SlackConfig

Source§

fn schema_name() -> Cow<'static, str>

The name of the generated JSON Schema. Read more
Source§

fn schema_id() -> Cow<'static, str>

Returns a string that uniquely identifies the schema produced by this type. Read more
Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type. Read more
Source§

fn inline_schema() -> bool

Whether JSON Schemas generated for this type should be included directly in parent schemas, rather than being re-used where possible using the $ref keyword. Read more
Source§

impl MaskSecrets for SlackConfig

Source§

fn mask_secrets(&mut self)

Source§

fn restore_secrets_from(&mut self, current: &Self)

Source§

impl Serialize for SlackConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

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> 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<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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

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

impl<T> PolicyExt for T
where T: ?Sized,

§

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
§

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> Same for T

Source§

type Output = T

Should always be Self
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, 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,