1mod bash;
2mod compact;
3mod config;
4mod conversation;
5mod file_ops;
6mod hooks;
7mod json;
8mod mcp;
9mod mcp_client;
10mod mcp_remote;
11mod mcp_stdio;
12mod oauth;
13mod permissions;
14mod prompt;
15mod remote;
16pub mod sandbox;
17mod session;
18mod usage;
19
20pub use bash::{execute_bash, BashCommandInput, BashCommandOutput};
21pub use compact::{
22 compact_session, estimate_session_tokens, format_compact_summary,
23 get_compact_continuation_message, should_compact, CompactionConfig, CompactionResult,
24};
25pub use config::{
26 ConfigEntry, ConfigError, ConfigLoader, ConfigSource, CustomProviderConfig,
27 McpConfigCollection, McpManagedProxyServerConfig, McpOAuthConfig, McpRemoteServerConfig,
28 McpSdkServerConfig, McpServerConfig, McpStdioServerConfig, McpTransport,
29 McpWebSocketServerConfig, OAuthConfig, ResolvedPermissionMode, RuntimeConfig,
30 RuntimeFeatureConfig, RuntimeHookConfig, RuntimePluginConfig, ScopedMcpServerConfig,
31 CODINEER_SETTINGS_SCHEMA_NAME,
32};
33pub use conversation::{
34 ApiClient, ApiRequest, AssistantEvent, ConversationRuntime, RuntimeError, StaticToolExecutor,
35 ToolError, ToolExecutor, TurnSummary,
36};
37pub use file_ops::{
38 edit_file, glob_search, grep_search, read_file, write_file, EditFileOutput, GlobSearchOutput,
39 GrepOutputMode, GrepSearchInput, GrepSearchOutput, ReadFileOutput, StructuredPatchHunk,
40 TextFilePayload, WriteFileOutput,
41};
42pub use hooks::{HookCommandSource, HookEvent, HookRunResult, HookRunner};
43pub use lsp::{
44 FileDiagnostics, LspContextEnrichment, LspError, LspManager, LspServerConfig, SymbolLocation,
45 WorkspaceDiagnostics,
46};
47pub use mcp::{
48 mcp_server_signature, mcp_tool_name, mcp_tool_prefix, normalize_name_for_mcp,
49 scoped_mcp_config_hash, unwrap_mcp_proxy_url,
50};
51pub use mcp_client::McpClientBootstrap;
52pub use mcp_stdio::{
53 ManagedMcpTool, McpServerManager, McpServerManagerError, McpStdioProcess, McpTool,
54 McpToolCallContent, McpToolCallResult, UnsupportedMcpServer,
55};
56pub use oauth::{
57 clear_oauth_credentials, generate_pkce_pair, generate_state, load_oauth_credentials,
58 loopback_redirect_uri, parse_oauth_callback_query, parse_oauth_callback_request_target,
59 save_oauth_credentials, OAuthAuthorizationRequest, OAuthCallbackParams, OAuthRefreshRequest,
60 OAuthTokenExchangeRequest, OAuthTokenSet, PkceCodePair,
61};
62pub use permissions::{
63 PermissionMode, PermissionOutcome, PermissionPolicy, PermissionPromptDecision,
64 PermissionPrompter, PermissionRequest,
65};
66pub use prompt::{
67 load_system_prompt, load_system_prompt_with_lsp, ContextFile, ProjectContext,
68 SystemPromptBuilder,
69};
70pub use remote::{
71 inherited_upstream_proxy_env, RemoteSessionContext, UpstreamProxyBootstrap, UpstreamProxyState,
72};
73pub use session::{ContentBlock, ConversationMessage, MessageRole, Session, SessionError};
74pub use usage::{format_usd, pricing_for_model, TokenUsage, UsageCostEstimate, UsageTracker};
75
76#[must_use]
78pub fn home_dir() -> Option<std::path::PathBuf> {
79 std::env::var_os("HOME")
80 .or_else(|| std::env::var_os("USERPROFILE"))
81 .map(std::path::PathBuf::from)
82}
83
84#[cfg(test)]
85fn test_env_lock() -> std::sync::MutexGuard<'static, ()> {
86 use std::sync::Mutex;
87 static ENV_LOCK: Mutex<()> = Mutex::new(());
88 ENV_LOCK
89 .lock()
90 .unwrap_or_else(|poisoned| poisoned.into_inner())
91}