1pub use zeroclaw_config::migration;
7pub use zeroclaw_config::providers;
8pub mod schema;
9pub mod traits;
10
11pub use schema::{
12 AliasedAgentConfig, AssemblyAiSttConfig, AuditConfig, BackupConfig, BrowserComputerUseConfig,
13 BrowserConfig, BuiltinHooksConfig, ChannelsConfig, ClassificationRule, ClaudeCodeConfig,
14 ClaudeCodeRunnerConfig, CloudOpsConfig, CodexCliConfig, ComposioConfig, Config,
15 ConversationalAiConfig, CostConfig, CronJobDecl, CronScheduleDecl, DEFAULT_GWS_SERVICES,
16 DataRetentionConfig, DeepgramSttConfig, DelegateToolConfig, DiscordConfig, DockerRuntimeConfig,
17 EmbeddingRouteConfig, EstopConfig, GatewayConfig, GeminiCliConfig, GoogleSttConfig,
18 GoogleWorkspaceAllowedOperation, GoogleWorkspaceConfig, HardwareConfig, HardwareTransport,
19 HeartbeatConfig, HooksConfig, HttpRequestConfig, IMessageConfig, IdentityConfig,
20 ImageGenConfig, ImageProviderDalleConfig, ImageProviderFluxConfig, ImageProviderImagenConfig,
21 ImageProviderStabilityConfig, JiraConfig, KnowledgeConfig, LarkConfig, LinkEnricherConfig,
22 LinkedInConfig, LinkedInContentConfig, LinkedInImageConfig, LocalWhisperConfig, MatrixConfig,
23 McpConfig, McpServerConfig, McpTransport, MediaPipelineConfig, MemoryConfig,
24 MemoryPolicyConfig, Microsoft365Config, ModelRouteConfig, MqttConfig, MultimodalConfig,
25 NextcloudTalkConfig, NodeTransportConfig, NodesConfig, NotionConfig, ObservabilityConfig,
26 OpenAiSttConfig, OpenCodeCliConfig, OpenVpnTunnelConfig, OtpConfig, OtpMethod, PacingConfig,
27 PeripheralBoardConfig, PeripheralsConfig, PipelineConfig, PluginsConfig, PostgresStorageConfig,
28 ProjectIntelConfig, ProxyConfig, ProxyScope, QdrantStorageConfig, QueryClassificationConfig,
29 ReliabilityConfig, RiskProfileConfig, RuntimeConfig, SandboxBackend, SandboxConfig,
30 SchedulerConfig, SearchMode, SecretsConfig, SecurityConfig, SecurityOpsConfig, ShellToolConfig,
31 SkillCreationConfig, SkillImprovementConfig, SkillsConfig, SkillsPromptInjectionMode,
32 SlackConfig, SopConfig, SqliteStorageConfig, StorageConfig, StreamMode, TelegramConfig,
33 TextBrowserConfig, ToolFilterGroup, ToolFilterGroupMode, TranscriptionConfig, TtsConfig,
34 TtsProviderConfig, TunnelConfig, VerifiableIntentConfig, WebFetchConfig, WebSearchConfig,
35 WebhookConfig, WhatsAppChatPolicy, WhatsAppWebMode, apply_channel_proxy_to_builder,
36 apply_runtime_proxy_to_builder, build_channel_proxy_client,
37 build_channel_proxy_client_with_timeouts, build_runtime_proxy_client,
38 build_runtime_proxy_client_with_timeouts, runtime_proxy_config, set_runtime_proxy_config,
39 ws_connect_with_proxy,
40};
41
42pub use schema::ModelProviderConfig;
43pub use schema::{
47 Ai21ModelProviderConfig, AihubmixModelProviderConfig, AnthropicModelProviderConfig,
48 AnyscaleModelProviderConfig, AstraiModelProviderConfig, AvianModelProviderConfig,
49 AzureModelProviderConfig, BaichuanModelProviderConfig, BasetenModelProviderConfig,
50 BedrockModelProviderConfig, CerebrasModelProviderConfig, CloudflareModelProviderConfig,
51 CohereModelProviderConfig, CopilotModelProviderConfig, CustomModelProviderConfig,
52 DeepinfraModelProviderConfig, DeepmystModelProviderConfig, DeepseekModelProviderConfig,
53 DoubaoModelProviderConfig, FireworksModelProviderConfig, FriendliModelProviderConfig,
54 GeminiCliModelProviderConfig, GeminiModelProviderConfig, GlmModelProviderConfig,
55 GroqModelProviderConfig, HuggingfaceModelProviderConfig, HunyuanModelProviderConfig,
56 HyperbolicModelProviderConfig, KiloCliModelProviderConfig, LeptonModelProviderConfig,
57 LitellmModelProviderConfig, LlamacppModelProviderConfig, LmstudioModelProviderConfig,
58 MinimaxModelProviderConfig, MistralModelProviderConfig, MoonshotModelProviderConfig,
59 NebiusModelProviderConfig, NovitaModelProviderConfig, NscaleModelProviderConfig,
60 NvidiaModelProviderConfig, OllamaModelProviderConfig, OpenAIModelProviderConfig,
61 OpenRouterModelProviderConfig, OpencodeModelProviderConfig, OsaurusModelProviderConfig,
62 OvhModelProviderConfig, PerplexityModelProviderConfig, QianfanModelProviderConfig,
63 QwenModelProviderConfig, RekaModelProviderConfig, SambanovaModelProviderConfig,
64 SglangModelProviderConfig, SiliconflowModelProviderConfig, StepfunModelProviderConfig,
65 SyntheticModelProviderConfig, TelnyxModelProviderConfig, TogetherModelProviderConfig,
66 VeniceModelProviderConfig, VercelModelProviderConfig, VllmModelProviderConfig,
67 XaiModelProviderConfig, YiModelProviderConfig, ZaiModelProviderConfig,
68};
69pub use traits::HasPropKind;
70pub use traits::PropFieldInfo;
71pub use traits::PropKind;
72pub use traits::SecretFieldInfo;
73
74#[cfg(feature = "schema-export")]
76pub use zeroclaw_config::helpers::enum_variants;
77pub use zeroclaw_config::helpers::{
78 make_prop_field, route_hashmap_path, serde_get_prop, serde_set_prop,
79};
80
81#[cfg(test)]
82mod tests {
83 use super::*;
84
85 #[test]
86 fn reexported_config_default_is_constructible() {
87 let config = Config::default();
88
89 assert!(config.providers.models.is_empty());
90 }
91
92 #[test]
93 fn reexported_channel_configs_are_constructible() {
94 let telegram = TelegramConfig {
95 enabled: true,
96 bot_token: "token".into(),
97 stream_mode: StreamMode::default(),
98 draft_update_interval_ms: 1000,
99 interrupt_on_new_message: false,
100 mention_only: false,
101 ack_reactions: None,
102 proxy_url: None,
103 approval_timeout_secs: 120,
104 excluded_tools: vec![],
105 reply_min_interval_secs: 0,
106 reply_queue_depth_max: 0,
107 };
108
109 let discord = DiscordConfig {
110 enabled: true,
111 bot_token: "token".into(),
112 guild_ids: vec!["123".into()],
113 channel_ids: vec![],
114 archive: false,
115 listen_to_bots: false,
116 interrupt_on_new_message: false,
117 mention_only: false,
118 proxy_url: None,
119 stream_mode: StreamMode::default(),
120 draft_update_interval_ms: 1000,
121 multi_message_delay_ms: 800,
122 stall_timeout_secs: 0,
123 approval_timeout_secs: 300,
124 excluded_tools: vec![],
125 reply_min_interval_secs: 0,
126 reply_queue_depth_max: 0,
127 };
128
129 let lark = LarkConfig {
130 enabled: true,
131 app_id: "app-id".into(),
132 app_secret: "app-secret".into(),
133 encrypt_key: None,
134 verification_token: None,
135 mention_only: false,
136 use_feishu: false,
137 receive_mode: crate::config::schema::LarkReceiveMode::Websocket,
138 port: None,
139 proxy_url: None,
140 excluded_tools: vec![],
141 approval_timeout_secs: 300,
142 per_user_session: false,
143 stream_mode: StreamMode::default(),
144 draft_update_interval_ms: 1000,
145 };
146 let nextcloud_talk = NextcloudTalkConfig {
147 enabled: true,
148 base_url: "https://cloud.example.com".into(),
149 app_token: "app-token".into(),
150 webhook_secret: None,
151 proxy_url: None,
152 bot_name: None,
153 excluded_tools: vec![],
154 stream_mode: StreamMode::default(),
155 draft_update_interval_ms: 1000,
156 };
157
158 assert_eq!(telegram.bot_token, "token");
159 assert_eq!(discord.guild_ids, vec!["123".to_string()]);
160 assert_eq!(lark.app_id, "app-id");
161 assert_eq!(nextcloud_talk.base_url, "https://cloud.example.com");
162 }
163}