lib.rs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. //! Core runtime primitives for the `claw` CLI and supporting crates.
  2. //!
  3. //! This crate owns session persistence, permission evaluation, prompt assembly,
  4. //! MCP plumbing, tool-facing file operations, and the core conversation loop
  5. //! that drives interactive and one-shot turns.
  6. mod bash;
  7. pub mod bash_validation;
  8. mod bootstrap;
  9. mod compact;
  10. mod config;
  11. mod conversation;
  12. mod file_ops;
  13. pub mod green_contract;
  14. mod hooks;
  15. mod json;
  16. mod lane_events;
  17. pub mod lsp_client;
  18. mod mcp;
  19. mod mcp_client;
  20. pub mod mcp_lifecycle_hardened;
  21. mod mcp_stdio;
  22. pub mod mcp_tool_bridge;
  23. mod oauth;
  24. pub mod permission_enforcer;
  25. mod permissions;
  26. pub mod plugin_lifecycle;
  27. mod policy_engine;
  28. mod prompt;
  29. pub mod recovery_recipes;
  30. mod remote;
  31. pub mod sandbox;
  32. mod session;
  33. pub mod session_control;
  34. mod sse;
  35. pub mod stale_branch;
  36. pub mod summary_compression;
  37. pub mod task_packet;
  38. pub mod task_registry;
  39. pub mod team_cron_registry;
  40. pub mod trust_resolver;
  41. mod usage;
  42. pub mod worker_boot;
  43. pub use bash::{execute_bash, BashCommandInput, BashCommandOutput};
  44. pub use bootstrap::{BootstrapPhase, BootstrapPlan};
  45. pub use compact::{
  46. compact_session, estimate_session_tokens, format_compact_summary,
  47. get_compact_continuation_message, should_compact, CompactionConfig, CompactionResult,
  48. };
  49. pub use config::{
  50. ConfigEntry, ConfigError, ConfigLoader, ConfigSource, McpConfigCollection,
  51. McpManagedProxyServerConfig, McpOAuthConfig, McpRemoteServerConfig, McpSdkServerConfig,
  52. McpServerConfig, McpStdioServerConfig, McpTransport, McpWebSocketServerConfig, OAuthConfig,
  53. ResolvedPermissionMode, RuntimeConfig, RuntimeFeatureConfig, RuntimeHookConfig,
  54. RuntimePermissionRuleConfig, RuntimePluginConfig, ScopedMcpServerConfig,
  55. CLAW_SETTINGS_SCHEMA_NAME,
  56. };
  57. pub use conversation::{
  58. auto_compaction_threshold_from_env, ApiClient, ApiRequest, AssistantEvent, AutoCompactionEvent,
  59. ConversationRuntime, PromptCacheEvent, RuntimeError, StaticToolExecutor, ToolError,
  60. ToolExecutor, TurnSummary,
  61. };
  62. pub use file_ops::{
  63. edit_file, glob_search, grep_search, read_file, write_file, EditFileOutput, GlobSearchOutput,
  64. GrepSearchInput, GrepSearchOutput, ReadFileOutput, StructuredPatchHunk, TextFilePayload,
  65. WriteFileOutput,
  66. };
  67. pub use hooks::{
  68. HookAbortSignal, HookEvent, HookProgressEvent, HookProgressReporter, HookRunResult, HookRunner,
  69. };
  70. pub use lane_events::{
  71. LaneEvent, LaneEventBlocker, LaneEventName, LaneEventStatus, LaneFailureClass,
  72. };
  73. pub use mcp::{
  74. mcp_server_signature, mcp_tool_name, mcp_tool_prefix, normalize_name_for_mcp,
  75. scoped_mcp_config_hash, unwrap_ccr_proxy_url,
  76. };
  77. pub use mcp_client::{
  78. McpClientAuth, McpClientBootstrap, McpClientTransport, McpManagedProxyTransport,
  79. McpRemoteTransport, McpSdkTransport, McpStdioTransport,
  80. };
  81. pub use mcp_lifecycle_hardened::{
  82. McpDegradedReport, McpErrorSurface, McpFailedServer, McpLifecyclePhase, McpLifecycleState,
  83. McpLifecycleValidator, McpPhaseResult,
  84. };
  85. pub use mcp_stdio::{
  86. spawn_mcp_stdio_process, JsonRpcError, JsonRpcId, JsonRpcRequest, JsonRpcResponse,
  87. ManagedMcpTool, McpDiscoveryFailure, McpInitializeClientInfo, McpInitializeParams,
  88. McpInitializeResult, McpInitializeServerInfo, McpListResourcesParams, McpListResourcesResult,
  89. McpListToolsParams, McpListToolsResult, McpReadResourceParams, McpReadResourceResult,
  90. McpResource, McpResourceContents, McpServerManager, McpServerManagerError, McpStdioProcess,
  91. McpTool, McpToolCallContent, McpToolCallParams, McpToolCallResult, McpToolDiscoveryReport,
  92. UnsupportedMcpServer,
  93. };
  94. pub use oauth::{
  95. clear_oauth_credentials, code_challenge_s256, credentials_path, generate_pkce_pair,
  96. generate_state, load_oauth_credentials, loopback_redirect_uri, parse_oauth_callback_query,
  97. parse_oauth_callback_request_target, save_oauth_credentials, OAuthAuthorizationRequest,
  98. OAuthCallbackParams, OAuthRefreshRequest, OAuthTokenExchangeRequest, OAuthTokenSet,
  99. PkceChallengeMethod, PkceCodePair,
  100. };
  101. pub use permissions::{
  102. PermissionContext, PermissionMode, PermissionOutcome, PermissionOverride, PermissionPolicy,
  103. PermissionPromptDecision, PermissionPrompter, PermissionRequest,
  104. };
  105. pub use plugin_lifecycle::{
  106. DegradedMode, DiscoveryResult, PluginHealthcheck, PluginLifecycle, PluginLifecycleEvent,
  107. PluginState, ResourceInfo, ServerHealth, ServerStatus, ToolInfo,
  108. };
  109. pub use policy_engine::{
  110. evaluate, DiffScope, GreenLevel, LaneBlocker, LaneContext, PolicyAction, PolicyCondition,
  111. PolicyEngine, PolicyRule, ReconcileReason, ReviewStatus,
  112. };
  113. pub use prompt::{
  114. load_system_prompt, prepend_bullets, ContextFile, ProjectContext, PromptBuildError,
  115. SystemPromptBuilder, FRONTIER_MODEL_NAME, SYSTEM_PROMPT_DYNAMIC_BOUNDARY,
  116. };
  117. pub use recovery_recipes::{
  118. attempt_recovery, recipe_for, EscalationPolicy, FailureScenario, RecoveryContext,
  119. RecoveryEvent, RecoveryRecipe, RecoveryResult, RecoveryStep,
  120. };
  121. pub use remote::{
  122. inherited_upstream_proxy_env, no_proxy_list, read_token, upstream_proxy_ws_url,
  123. RemoteSessionContext, UpstreamProxyBootstrap, UpstreamProxyState, DEFAULT_REMOTE_BASE_URL,
  124. DEFAULT_SESSION_TOKEN_PATH, DEFAULT_SYSTEM_CA_BUNDLE, NO_PROXY_HOSTS, UPSTREAM_PROXY_ENV_KEYS,
  125. };
  126. pub use sandbox::{
  127. build_linux_sandbox_command, detect_container_environment, detect_container_environment_from,
  128. resolve_sandbox_status, resolve_sandbox_status_for_request, ContainerEnvironment,
  129. FilesystemIsolationMode, LinuxSandboxCommand, SandboxConfig, SandboxDetectionInputs,
  130. SandboxRequest, SandboxStatus,
  131. };
  132. pub use session::{
  133. ContentBlock, ConversationMessage, MessageRole, Session, SessionCompaction, SessionError,
  134. SessionFork,
  135. };
  136. pub use sse::{IncrementalSseParser, SseEvent};
  137. pub use stale_branch::{
  138. apply_policy, check_freshness, BranchFreshness, StaleBranchAction, StaleBranchEvent,
  139. StaleBranchPolicy,
  140. };
  141. pub use task_packet::{validate_packet, TaskPacket, TaskPacketValidationError, ValidatedPacket};
  142. pub use trust_resolver::{TrustConfig, TrustDecision, TrustEvent, TrustPolicy, TrustResolver};
  143. pub use usage::{
  144. format_usd, pricing_for_model, ModelPricing, TokenUsage, UsageCostEstimate, UsageTracker,
  145. };
  146. pub use worker_boot::{
  147. Worker, WorkerEvent, WorkerEventKind, WorkerEventPayload, WorkerFailure, WorkerFailureKind,
  148. WorkerPromptTarget, WorkerReadySnapshot, WorkerRegistry, WorkerStatus, WorkerTrustResolution,
  149. };
  150. #[cfg(test)]
  151. pub(crate) fn test_env_lock() -> std::sync::MutexGuard<'static, ()> {
  152. static LOCK: std::sync::OnceLock<std::sync::Mutex<()>> = std::sync::OnceLock::new();
  153. LOCK.get_or_init(|| std::sync::Mutex::new(()))
  154. .lock()
  155. .unwrap_or_else(std::sync::PoisonError::into_inner)
  156. }