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