Skip to main content

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