Skip to main content

codineer_runtime/
lib.rs

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/// Cross-platform home directory: tries `HOME` first (Unix + WSL), falls back to `USERPROFILE` (Windows).
84#[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}