Skip to main content

albert_runtime/
lib.rs

1mod bash;
2mod bootstrap;
3mod compact;
4mod config;
5mod conversation;
6mod file_ops;
7mod hooks;
8mod json;
9mod mcp;
10mod mcp_client;
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 bootstrap::{BootstrapPhase, BootstrapPlan};
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    ConfigEntry, ConfigError, ConfigLoader, ConfigSource, McpTernlangAiProxyServerConfig,
28    McpConfigCollection, McpOAuthConfig, McpRemoteServerConfig, McpSdkServerConfig,
29    McpServerConfig, McpStdioServerConfig, McpTransport, McpWebSocketServerConfig, OAuthConfig,
30    ResolvedPermissionMode, RuntimeConfig, RuntimeFeatureConfig, RuntimeHookConfig,
31    ScopedMcpServerConfig, TERNLANG_CLI_SETTINGS_SCHEMA_NAME,
32};
33pub use conversation::{
34    auto_compaction_threshold_from_env, ApiClient, ApiRequest, AssistantEvent, AutoCompactionEvent,
35    ConversationRuntime, RuntimeError, StaticToolExecutor, ToolError, ToolExecutor, ToolResult,
36    TurnSummary,
37};
38pub use file_ops::{
39    edit_file, glob_search, grep_search, read_file, write_file, EditFileOutput, GlobSearchOutput,
40    GrepSearchInput, GrepSearchOutput, ReadFileOutput, StructuredPatchHunk, TextFilePayload,
41    WriteFileOutput,
42};
43pub use hooks::{HookEvent, HookRunResult, HookRunner};
44pub use mcp::{
45    mcp_server_signature, mcp_tool_name, mcp_tool_prefix, normalize_name_for_mcp,
46    scoped_mcp_config_hash, unwrap_ccr_proxy_url,
47};
48pub use mcp_client::{
49    McpTernlangAiProxyTransport, McpClientAuth, McpClientBootstrap, McpClientTransport,
50    McpRemoteTransport, McpSdkTransport, McpStdioTransport,
51};
52pub use mcp_stdio::{
53    spawn_mcp_stdio_process, JsonRpcError, JsonRpcId, JsonRpcRequest, JsonRpcResponse,
54    ManagedMcpTool, McpInitializeClientInfo, McpInitializeParams, McpInitializeResult,
55    McpInitializeServerInfo, McpListResourcesParams, McpListResourcesResult, McpListToolsParams,
56    McpListToolsResult, McpReadResourceParams, McpReadResourceResult, McpResource,
57    McpResourceContents, McpServerManager, McpServerManagerError, McpStdioProcess, McpTool,
58    McpToolCallContent, McpToolCallParams, McpToolCallResult, UnsupportedMcpServer,
59};
60pub use oauth::{
61    clear_oauth_credentials, code_challenge_s256, credentials_path, generate_pkce_pair,
62    generate_state, load_oauth_credentials, load_provider_config, loopback_redirect_uri,
63    parse_oauth_callback_query, parse_oauth_callback_request_target, save_oauth_credentials,
64    save_provider_config, OAuthAuthorizationRequest, OAuthCallbackParams, OAuthRefreshRequest,
65    OAuthTokenExchangeRequest, OAuthTokenSet, PkceChallengeMethod, PkceCodePair, ProviderConfig,
66};
67pub use permissions::{
68    PermissionMode, PermissionOutcome, PermissionPolicy, PermissionPromptDecision,
69    PermissionPrompter, PermissionRequest,
70};
71pub use prompt::{
72    load_system_prompt, prepend_bullets, ContextFile, ProjectContext, PromptBuildError,
73    SystemPromptBuilder, FRONTIER_MODEL_NAME, SYSTEM_PROMPT_DYNAMIC_BOUNDARY,
74};
75pub use remote::{
76    inherited_upstream_proxy_env, no_proxy_list, read_token, upstream_proxy_ws_url,
77    RemoteSessionContext, UpstreamProxyBootstrap, UpstreamProxyState, DEFAULT_REMOTE_BASE_URL,
78    DEFAULT_SESSION_TOKEN_PATH, DEFAULT_SYSTEM_CA_BUNDLE, NO_PROXY_HOSTS, UPSTREAM_PROXY_ENV_KEYS,
79};
80pub use session::{ContentBlock, ConversationMessage, MessageRole, Session, SessionError};
81pub use usage::{
82    format_usd, pricing_for_model, ModelPricing, TokenUsage, UsageCostEstimate, UsageTracker,
83};
84
85#[cfg(test)]
86pub(crate) fn test_env_lock() -> std::sync::MutexGuard<'static, ()> {
87    static LOCK: std::sync::OnceLock<std::sync::Mutex<()>> = std::sync::OnceLock::new();
88    LOCK.get_or_init(|| std::sync::Mutex::new(()))
89        .lock()
90        .unwrap_or_else(std::sync::PoisonError::into_inner)
91}