diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml index ab4033d..8077655 100644 --- a/.github/workflows/rust-ci.yml +++ b/.github/workflows/rust-ci.yml @@ -1,4 +1,4 @@ -name: rust-ci +name: Rust CI on: push: @@ -6,33 +6,51 @@ on: - main - 'gaebal/**' - 'omx-issue-*' + paths: + - .github/workflows/rust-ci.yml + - rust/** pull_request: + branches: + - main + paths: + - .github/workflows/rust-ci.yml + - rust/** + workflow_dispatch: + +concurrency: + group: rust-ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +defaults: + run: + working-directory: rust + +env: + CARGO_TERM_COLOR: always jobs: - rust-ci: + fmt: + name: cargo fmt runs-on: ubuntu-latest - defaults: - run: - working-directory: rust steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable with: - components: rustfmt, clippy - - - name: Cache cargo - uses: Swatinem/rust-cache@v2 + components: rustfmt + - uses: Swatinem/rust-cache@v2 with: - workspaces: rust - - - name: cargo fmt + workspaces: rust -> target + - name: Check formatting run: cargo fmt --all --check - - name: cargo clippy - run: cargo clippy -p rusty-claude-cli --bin claw --no-deps -- -D warnings - - - name: cargo test + test-rusty-claude-cli: + name: cargo test -p rusty-claude-cli + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + with: + workspaces: rust -> target + - name: Run crate tests run: cargo test -p rusty-claude-cli diff --git a/rust/crates/api/src/providers/anthropic.rs b/rust/crates/api/src/providers/anthropic.rs index e8cbe3f..f8b41ac 100644 --- a/rust/crates/api/src/providers/anthropic.rs +++ b/rust/crates/api/src/providers/anthropic.rs @@ -322,7 +322,10 @@ impl AnthropicClient { .with_property( "estimated_cost_usd", Value::String(format_usd( - response.usage.estimated_cost_usd(&response.model).total_cost_usd(), + response + .usage + .estimated_cost_usd(&response.model) + .total_cost_usd(), )), ), ); diff --git a/rust/crates/runtime/src/lib.rs b/rust/crates/runtime/src/lib.rs index 47e48af..6436ca6 100644 --- a/rust/crates/runtime/src/lib.rs +++ b/rust/crates/runtime/src/lib.rs @@ -24,17 +24,17 @@ pub use compact::{ get_compact_continuation_message, should_compact, CompactionConfig, CompactionResult, }; pub use config::{ - ConfigEntry, ConfigError, ConfigLoader, ConfigSource, McpManagedProxyServerConfig, - McpConfigCollection, McpOAuthConfig, McpRemoteServerConfig, McpSdkServerConfig, + ConfigEntry, ConfigError, ConfigLoader, ConfigSource, McpConfigCollection, + McpManagedProxyServerConfig, McpOAuthConfig, McpRemoteServerConfig, McpSdkServerConfig, McpServerConfig, McpStdioServerConfig, McpTransport, McpWebSocketServerConfig, OAuthConfig, ResolvedPermissionMode, RuntimeConfig, RuntimeFeatureConfig, RuntimeHookConfig, RuntimePermissionRuleConfig, RuntimePluginConfig, ScopedMcpServerConfig, CLAW_SETTINGS_SCHEMA_NAME, }; pub use conversation::{ - auto_compaction_threshold_from_env, ApiClient, ApiRequest, AssistantEvent, - AutoCompactionEvent, ConversationRuntime, PromptCacheEvent, RuntimeError, - StaticToolExecutor, ToolError, ToolExecutor, TurnSummary, + auto_compaction_threshold_from_env, ApiClient, ApiRequest, AssistantEvent, AutoCompactionEvent, + ConversationRuntime, PromptCacheEvent, RuntimeError, StaticToolExecutor, ToolError, + ToolExecutor, TurnSummary, }; pub use file_ops::{ edit_file, glob_search, grep_search, read_file, write_file, EditFileOutput, GlobSearchOutput, @@ -49,7 +49,7 @@ pub use mcp::{ scoped_mcp_config_hash, unwrap_ccr_proxy_url, }; pub use mcp_client::{ - McpManagedProxyTransport, McpClientAuth, McpClientBootstrap, McpClientTransport, + McpClientAuth, McpClientBootstrap, McpClientTransport, McpManagedProxyTransport, McpRemoteTransport, McpSdkTransport, McpStdioTransport, }; pub use mcp_stdio::{ diff --git a/rust/crates/runtime/src/mcp_client.rs b/rust/crates/runtime/src/mcp_client.rs index 0e94391..e0e1f2c 100644 --- a/rust/crates/runtime/src/mcp_client.rs +++ b/rust/crates/runtime/src/mcp_client.rs @@ -97,12 +97,10 @@ impl McpClientTransport { McpServerConfig::Sdk(config) => Self::Sdk(McpSdkTransport { name: config.name.clone(), }), - McpServerConfig::ManagedProxy(config) => { - Self::ManagedProxy(McpManagedProxyTransport { - url: config.url.clone(), - id: config.id.clone(), - }) - } + McpServerConfig::ManagedProxy(config) => Self::ManagedProxy(McpManagedProxyTransport { + url: config.url.clone(), + id: config.id.clone(), + }), } } } diff --git a/rust/crates/rusty-claude-cli/src/main.rs b/rust/crates/rusty-claude-cli/src/main.rs index 027455d..da194cc 100644 --- a/rust/crates/rusty-claude-cli/src/main.rs +++ b/rust/crates/rusty-claude-cli/src/main.rs @@ -876,6 +876,7 @@ impl GitWorkspaceSummary { } } +#[cfg(test)] fn format_unknown_slash_command_message(name: &str) -> String { let suggestions = suggest_slash_commands(name); if suggestions.is_empty() {