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 default_target: None,
106 };
107
108 let discord = DiscordConfig {
109 enabled: true,
110 bot_token: "token".into(),
111 guild_ids: vec!["123".into()],
112 channel_ids: vec![],
113 archive: false,
114 listen_to_bots: false,
115 interrupt_on_new_message: false,
116 mention_only: false,
117 proxy_url: None,
118 stream_mode: StreamMode::default(),
119 draft_update_interval_ms: 1000,
120 multi_message_delay_ms: 800,
121 stall_timeout_secs: 0,
122 approval_timeout_secs: 300,
123 excluded_tools: vec![],
124 default_target: None,
125 };
126
127 let lark = LarkConfig {
128 enabled: true,
129 app_id: "app-id".into(),
130 app_secret: "app-secret".into(),
131 encrypt_key: None,
132 verification_token: None,
133 mention_only: false,
134 use_feishu: false,
135 receive_mode: crate::config::schema::LarkReceiveMode::Websocket,
136 port: None,
137 proxy_url: None,
138 excluded_tools: vec![],
139 default_target: None,
140 };
141 let nextcloud_talk = NextcloudTalkConfig {
142 enabled: true,
143 base_url: "https://cloud.example.com".into(),
144 app_token: "app-token".into(),
145 webhook_secret: None,
146 proxy_url: None,
147 bot_name: None,
148 excluded_tools: vec![],
149 stream_mode: StreamMode::default(),
150 draft_update_interval_ms: 1000,
151 };
152
153 assert_eq!(telegram.bot_token, "token");
154 assert_eq!(discord.guild_ids, vec!["123".to_string()]);
155 assert_eq!(lark.app_id, "app-id");
156 assert_eq!(nextcloud_talk.base_url, "https://cloud.example.com");
157 }
158}