Skip to main content

codineer_runtime/
lib.rs

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