Skip to main content

vtcode_config/
lib.rs

1#![allow(
2    clippy::expect_used,
3    clippy::unreachable,
4    missing_docs,
5    dead_code,
6    unused_imports,
7    reason = "Intentional compatibility, platform, or test-only suppression."
8)]
9#![cfg_attr(
10    not(test),
11    allow(
12        clippy::map_err_ignore,
13        reason = "Configuration compatibility paths preserve legacy error mapping semantics."
14    )
15)]
16#![expect(
17    unused_results,
18    clippy::let_underscore_must_use,
19    clippy::indexing_slicing,
20    clippy::string_slice,
21    clippy::cast_possible_truncation,
22    reason = "Configuration loading mutates layered maps, parses validated text boundaries, and converts bounded persistence timestamps."
23)]
24//! Shared configuration loader utilities for VT Code and downstream integrations.
25//!
26//! This crate exposes [`VTCodeConfig`] and [`ConfigManager`] for reading and
27//! validating `vtcode.toml` files while allowing applications to customize the
28//! filesystem layout via [`ConfigDefaultsProvider`]. Consumers can opt into the
29//! [`bootstrap`](index.html#features) feature (enabled by default) to scaffold
30//! configuration directories with project-specific defaults.
31//! Disable default features when you only need parsing/validation to omit the
32//! filesystem bootstrap helpers and reduce dependencies.
33//!
34//! # Examples
35//! ```no_run
36//! use vtcode_config::ConfigManager;
37//!
38//! # fn main() -> anyhow::Result<()> {
39//! let manager = ConfigManager::load_from_workspace(".")?;
40//! println!("Active provider: {}", manager.config().agent.provider);
41//! # Ok(())
42//! # }
43//! ```
44//!
45//! Install a custom [`ConfigDefaultsProvider`] with
46//! [`install_config_defaults_provider`] when you need to override search paths
47//! or syntax highlighting defaults exposed by the loader.
48
49mod accessibility;
50pub mod acp;
51pub mod api_keys;
52pub mod auth;
53pub mod codex;
54pub mod constants;
55pub mod context;
56pub mod core;
57pub mod debug;
58pub mod defaults;
59pub(crate) mod env_helpers;
60pub mod hooks;
61pub mod loader;
62pub mod mcp;
63pub mod models;
64pub mod network_allowlist;
65pub mod optimization;
66pub mod output_styles;
67pub mod root;
68pub mod safety;
69#[cfg(feature = "schema")]
70pub mod schema;
71pub mod status_line;
72pub mod subagents;
73pub mod telemetry;
74pub mod terminal_title;
75pub mod timeouts;
76pub mod types;
77pub mod update;
78pub mod webmcp;
79pub mod workspace_env;
80
81pub use acp::{
82    AcpAuthMethod, AgentClientProtocolConfig, AgentClientProtocolTransport, AgentClientProtocolZedConfig,
83    AgentClientProtocolZedToolsConfig, AgentClientProtocolZedWorkspaceTrustMode, WorkspaceTrustLevel,
84};
85pub use api_keys::ApiKeySources;
86pub use context::{ContextFeaturesConfig, DynamicContextConfig, LedgerConfig};
87pub use core::{
88    AgentCodexAppServerConfig, AgentConfig, AgentOnboardingConfig, AgentPromptSuggestionsConfig, AuthConfig,
89    AutoPermissionConfig, AutoPermissionEnvironmentConfig, AutomationConfig, BundledSkillsConfig, CommandsConfig,
90    CopilotAuthConfig, CustomProviderApiFormat, CustomProviderCommandAuthConfig, CustomProviderConfig,
91    CustomProviderProfileConfig, DockerSandboxConfig, EditorToolConfig, ExternalSandboxConfig, ExternalSandboxType,
92    FullAutoConfig, GatekeeperConfig, MemoriesConfig, MicroVMSandboxConfig, MicroVmProvider, ModelConfig,
93    NetworkAllowlistEntryConfig, NetworkConfig, NetworkPolicy, OpenAIAuthConfig, OpenAIConfig, OpenAIHostedShellConfig,
94    OpenAIHostedShellDomainSecret, OpenAIHostedShellEnvironment, OpenAIHostedShellNetworkPolicy,
95    OpenAIHostedShellNetworkPolicyType, OpenAIHostedSkill, OpenAIManualCompactionConfig, OpenAIPreferredMethod,
96    OpenAIServiceTier, OpenResponsesConfig, OpenRouterAuthConfig, PluginRuntimeConfig, PluginTrustLevel,
97    PromptCacheRetention, PromptCachingConfig, ProviderOverrideConfig, ProviderPromptCachingConfig,
98    ResolvedCustomProviderProfile, ResourceLimitsConfig, ResourceLimitsPreset, SandboxConfig, SandboxPolicy,
99    SeccompConfig, SeccompProfilePreset, SecurityConfig, SensitivePathsConfig, SkillsConfig, SkillsRenderMode,
100    ThinkingDisplayMode, ToolPolicy, ToolProfile, ToolSearchAlgorithm, ToolsConfig, WebFetchConfig, WebFetchMode,
101    WebSearchConfig, WebSearchProvider,
102};
103pub use debug::{DebugConfig, TraceLevel};
104pub use defaults::{
105    ConfigDefaultsProvider, ContextStoreDefaults, PerformanceDefaults, ScenarioDefaults, SyntaxHighlightingDefaults,
106    WorkspacePathsDefaults, current_config_defaults, get_config_dir, get_data_dir, install_config_defaults_provider,
107    reset_to_default_config_defaults, with_config_defaults,
108};
109pub use hooks::{
110    HookCommandConfig, HookCommandKind, HookGroupConfig, HooksConfig, LifecycleHooksConfig, WorkspaceHookCommand,
111    WorkspaceLifecycleHooks,
112};
113pub use loader::layers::{
114    ConfigLayerEntry, ConfigLayerLoadError, ConfigLayerMetadata, ConfigLayerSource, ConfigLayerStack,
115    LayerDisabledReason,
116};
117pub use loader::{
118    ConfigBuilder, ConfigManager, ConfigWatcher, FeaturesConfig, SimpleConfigWatcher, SyntaxHighlightingConfig,
119    VTCodeConfig, WorkspaceConfig, explicit_config_path, fingerprint_str, fingerprint_toml_value, merge_toml_values,
120    merge_toml_values_with_origins, set_explicit_config_path,
121};
122pub use mcp::{
123    McpAllowListConfig, McpAllowListRules, McpClientConfig, McpHttpServerConfig, McpLifecycleConfig, McpProviderConfig,
124    McpStdioServerConfig, McpTransportConfig, McpUiConfig, McpUiMode,
125};
126pub use models::{MiMoAuthMethod, ModelId, OpenRouterMetadata};
127pub(crate) use network_allowlist::{
128    AiProviderCategories, AllowlistEntry, AllowlistMeta, DEFAULT_ALLOWLIST_TOML, LocalAiProviderEntry,
129    NetworkAllowlist, SearchCategories,
130};
131pub use optimization::{
132    AgentExecutionConfig, AsyncPipelineConfig, CommandCacheConfig, FileReadCacheConfig, LLMClientConfig,
133    MemoryPoolConfig, OptimizationConfig, ProfilingConfig, ToolRegistryConfig,
134};
135pub use output_styles::{OutputStyle, OutputStyleConfig, OutputStyleManager};
136pub use root::{
137    AskQuestionsConfig, ChatConfig, LayoutModeOverride, NotificationBackend, NotificationDeliveryMode, PtyConfig,
138    ReasoningDisplayMode, ToolDisplayMode, ToolOutputMode, UiConfig, UiDisplayMode, UiFullscreenConfig,
139    UiNotificationsConfig, UiProgramStatusConfig, UiTranscriptReviewConfig,
140};
141#[cfg(feature = "schema")]
142pub use schema::{vtcode_config_schema, vtcode_config_schema_json, vtcode_config_schema_pretty};
143pub use status_line::{StatusLineConfig, StatusLineMode};
144pub use subagents::{
145    AgentMode, DiscoveredSubagents, IsolationMode, SubagentDiscoveryInput, SubagentMcpServer, SubagentMemoryScope,
146    SubagentRuntimeLimits, SubagentSource, SubagentSpec, builtin_plan_agent, builtin_primary_auto_agent,
147    builtin_primary_build_agent, builtin_primary_coordinator_agent, builtin_primary_duck_agent, builtin_subagents,
148    discover_subagents, load_subagent_from_file,
149};
150pub use telemetry::TelemetryConfig;
151pub use terminal_title::{DEFAULT_TERMINAL_TITLE_ITEMS, TerminalTitleConfig};
152pub use timeouts::{TimeoutsConfig, resolve_timeout};
153pub use types::{
154    ReasoningEffortLevel, ResolvedShellPromptProfile, ShellProfilePlatform, ShellPromptProfile, SystemPromptMode,
155    ToolDocumentationMode, UiSurfacePreference, VerbosityLevel,
156};
157pub use vtcode_commons::ui_protocol::{DiffPreviewMode, ThinkingBlockState};
158pub use webmcp::{RemoteMcpConfig, WebmcpConfig};
159pub use workspace_env::{
160    read_workspace_env_value, remove_workspace_env_value, workspace_env_path, workspace_env_path_display,
161    write_workspace_env_value,
162};
163
164// Re-export auth module types
165pub use auth::{
166    AuthStatus, CopilotAuthConfig as AuthCopilotConfig, McpOAuthConfig, McpOAuthService, McpOAuthStatus, McpOAuthToken,
167    OpenAIAccountAuthService, OpenAIChatGptAuthHandle, OpenAIChatGptAuthStatus, OpenAIChatGptSession,
168    OpenRouterOAuthConfig, OpenRouterToken, PkceChallenge, clear_oauth_token, clear_openai_chatgpt_session,
169    generate_pkce_challenge, get_auth_status, get_auth_url, get_openai_chatgpt_auth_status,
170    get_openai_chatgpt_auth_url, load_oauth_token, load_openai_chatgpt_session, resolve_openai_auth, save_oauth_token,
171    save_openai_chatgpt_session,
172};
173pub use codex::{
174    FileOpener, HistoryConfig, HistoryPersistence, NotificationCondition, TerminalNotificationMethod,
175    TuiAlternateScreen, TuiConfig, TuiNotificationEvent, TuiNotificationsConfig,
176};