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}