[INFO] cloning repository https://github.com/xartifact/x-artisan [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/xartifact/x-artisan" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxartifact%2Fx-artisan", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxartifact%2Fx-artisan'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] aa37754cf6f2338a99805f6508bfe3ac07748777 [INFO] testing xartifact/x-artisan against 1.98.0-beta.1 for beta-1.98-2 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxartifact%2Fx-artisan" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/xartifact/x-artisan [INFO] finished tweaking git repo https://github.com/xartifact/x-artisan [INFO] tweaked toml for git repo https://github.com/xartifact/x-artisan written to /workspace/builds/worker-5-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/xartifact/x-artisan on toolchain 1.98.0-beta.1 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/xartifact/x-artisan already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [ERROR] error running command: no output for 300 seconds [INFO] testing xartifact/x-artisan against 1.98.0-beta.1 for beta-1.98-2 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxartifact%2Fx-artisan" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/xartifact/x-artisan [INFO] finished tweaking git repo https://github.com/xartifact/x-artisan [INFO] tweaked toml for git repo https://github.com/xartifact/x-artisan written to /workspace/builds/worker-5-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/xartifact/x-artisan on toolchain 1.98.0-beta.1 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/xartifact/x-artisan already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded reqwest-eventsource v0.6.0 [INFO] [stderr] Downloaded tui-textarea v0.7.0 [INFO] [stderr] Downloaded openssl-sys v0.9.113 [INFO] [stderr] Downloaded openssl v0.10.77 [INFO] [stderr] Downloaded eventsource-stream v0.2.3 [INFO] [stderr] Downloaded async-openai v0.27.2 [INFO] [stderr] Downloaded derive_builder_macro v0.20.2 [INFO] [stderr] Downloaded derive_builder_core v0.20.2 [INFO] [stderr] Downloaded derive_builder v0.20.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }` [INFO] [stdout] 9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64 [INFO] running `Command { std: "docker" "start" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling log v0.4.29 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling openssl-sys v0.9.113 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling openssl v0.10.77 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling mio v1.2.0 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling native-tls v0.2.18 [INFO] [stderr] Compiling darling_core v0.20.11 [INFO] [stderr] Compiling unicase v2.9.0 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling tokio v1.52.0 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling mime_guess v2.0.5 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling rustls-webpki v0.103.12 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling rustls-native-certs v0.8.3 [INFO] [stderr] Compiling linux-raw-sys v0.4.15 [INFO] [stderr] Compiling rustls v0.23.38 [INFO] [stderr] Compiling foldhash v0.1.5 [INFO] [stderr] Compiling instability v0.3.12 [INFO] [stderr] Compiling hashbrown v0.15.5 [INFO] [stderr] Compiling nom v7.1.3 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling darling_macro v0.20.11 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling darling v0.20.11 [INFO] [stderr] Compiling derive_builder_core v0.20.2 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling itertools v0.13.0 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling castaway v0.2.4 [INFO] [stderr] Compiling encoding_rs v0.8.35 [INFO] [stderr] Compiling unicode-segmentation v1.13.2 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling h2 v0.4.13 [INFO] [stderr] Compiling tokio-native-tls v0.3.1 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling unicode-truncate v1.1.0 [INFO] [stderr] Compiling compact_str v0.8.1 [INFO] [stderr] Compiling derive_builder_macro v0.20.2 [INFO] [stderr] Compiling strum v0.26.3 [INFO] [stderr] Compiling crossterm v0.28.1 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling eventsource-stream v0.2.3 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling lru v0.12.5 [INFO] [stderr] Compiling futures-executor v0.3.32 [INFO] [stderr] Compiling aho-corasick v1.1.4 [INFO] [stderr] Compiling unicode-width v0.2.0 [INFO] [stderr] Compiling cassowary v0.3.0 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling ratatui v0.29.0 [INFO] [stderr] Compiling dirs-sys v0.5.0 [INFO] [stderr] Compiling hyper v1.9.0 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling backoff v0.4.0 [INFO] [stderr] Compiling futures v0.3.32 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling derive_builder v0.20.2 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Compiling secrecy v0.10.3 [INFO] [stderr] Compiling env_home v0.1.0 [INFO] [stderr] Compiling which v7.0.3 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling uuid v1.23.1 [INFO] [stderr] Compiling tui-textarea v0.7.0 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling dirs v6.0.0 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling hyper-tls v0.6.0 [INFO] [stderr] Compiling hyper-rustls v0.27.9 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling reqwest-eventsource v0.6.0 [INFO] [stderr] Compiling async-openai v0.27.2 [INFO] [stderr] Compiling x-artisan v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tools/bash.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/llm/openai.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut request = CreateChatCompletionRequest { [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `timeout_secs` [INFO] [stdout] --> src/tools/bash.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | let timeout_secs = input["timeout"].as_u64().unwrap_or(120); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_secs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `model` is never read [INFO] [stdout] --> src/llm/anthropic.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct AnthropicProvider { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 12 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicSseEvent` is never used [INFO] [stdout] --> src/llm/anthropic.rs:52:6 [INFO] [stdout] | [INFO] [stdout] 52 | enum AnthropicSseEvent { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicMessageStart` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | struct AnthropicMessageStart { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicInputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct AnthropicInputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicOutputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:73:8 [INFO] [stdout] | [INFO] [stdout] 73 | struct AnthropicOutputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicBlock` is never used [INFO] [stdout] --> src/llm/anthropic.rs:79:6 [INFO] [stdout] | [INFO] [stdout] 79 | enum AnthropicBlock { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicDelta` is never used [INFO] [stdout] --> src/llm/anthropic.rs:86:6 [INFO] [stdout] | [INFO] [stdout] 86 | enum AnthropicDelta { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `model` is never read [INFO] [stdout] --> src/llm/openai.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct OpenAiProvider { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] 18 | client: OpenAiClient, [INFO] [stdout] 19 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tools/bash.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/llm/openai.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut request = CreateChatCompletionRequest { [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `timeout_secs` [INFO] [stdout] --> src/tools/bash.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | let timeout_secs = input["timeout"].as_u64().unwrap_or(120); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_secs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Api` and `Sse` are never constructed [INFO] [stdout] --> src/llm/mod.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 12 | pub enum LlmError { [INFO] [stdout] | -------- variants in this enum [INFO] [stdout] 13 | #[error("API error: {0}")] [INFO] [stdout] 14 | Api(String), [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | Sse(String), [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LlmError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatRequest` is never constructed [INFO] [stdout] --> src/llm/mod.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct ChatRequest { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatMessage` is never constructed [INFO] [stdout] --> src/llm/mod.rs:37:12 [INFO] [stdout] | [INFO] [stdout] 37 | pub struct ChatMessage { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolCallInfo` is never constructed [INFO] [stdout] --> src/llm/mod.rs:47:12 [INFO] [stdout] | [INFO] [stdout] 47 | pub struct ToolCallInfo { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `StreamEvent` is never used [INFO] [stdout] --> src/llm/mod.rs:54:10 [INFO] [stdout] | [INFO] [stdout] 54 | pub enum StreamEvent { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `LlmStream` is never used [INFO] [stdout] --> src/llm/mod.rs:63:10 [INFO] [stdout] | [INFO] [stdout] 63 | pub type LlmStream = Pin> + Send>>; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `chat_stream` and `provider_name` are never used [INFO] [stdout] --> src/llm/mod.rs:67:14 [INFO] [stdout] | [INFO] [stdout] 66 | pub trait LlmClient: Send + Sync { [INFO] [stdout] | --------- methods in this trait [INFO] [stdout] 67 | async fn chat_stream(&self, req: ChatRequest) -> Result; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 68 | fn provider_name(&self) -> &str; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `from_messages` is never used [INFO] [stdout] --> src/llm/mod.rs:84:12 [INFO] [stdout] | [INFO] [stdout] 83 | impl ChatRequest { [INFO] [stdout] | ---------------- associated function in this implementation [INFO] [stdout] 84 | pub fn from_messages(model: &str, messages: &[Message], tools: &[crate::types::tool_def::ToolDef]) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `client`, `api_key`, and `model` are never read [INFO] [stdout] --> src/llm/anthropic.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct AnthropicProvider { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 10 | client: Client, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 11 | api_key: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 12 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicRequest` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:26:8 [INFO] [stdout] | [INFO] [stdout] 26 | struct AnthropicRequest { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicMessage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:38:8 [INFO] [stdout] | [INFO] [stdout] 38 | struct AnthropicMessage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicTool` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:44:8 [INFO] [stdout] | [INFO] [stdout] 44 | struct AnthropicTool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicSseEvent` is never used [INFO] [stdout] --> src/llm/anthropic.rs:52:6 [INFO] [stdout] | [INFO] [stdout] 52 | enum AnthropicSseEvent { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicMessageStart` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | struct AnthropicMessageStart { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicInputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct AnthropicInputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicOutputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:73:8 [INFO] [stdout] | [INFO] [stdout] 73 | struct AnthropicOutputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicBlock` is never used [INFO] [stdout] --> src/llm/anthropic.rs:79:6 [INFO] [stdout] | [INFO] [stdout] 79 | enum AnthropicBlock { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicDelta` is never used [INFO] [stdout] --> src/llm/anthropic.rs:86:6 [INFO] [stdout] | [INFO] [stdout] 86 | enum AnthropicDelta { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `client` and `model` are never read [INFO] [stdout] --> src/llm/openai.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct OpenAiProvider { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 18 | client: OpenAiClient, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 19 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ToolError` is never used [INFO] [stdout] --> src/tools/mod.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | pub enum ToolError { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `Tool` is never used [INFO] [stdout] --> src/tools/mod.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub trait Tool: Send + Sync { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolRegistry` is never constructed [INFO] [stdout] --> src/tools/mod.rs:39:12 [INFO] [stdout] | [INFO] [stdout] 39 | pub struct ToolRegistry { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `register`, `get`, `list`, and `register_defaults` are never used [INFO] [stdout] --> src/tools/mod.rs:44:12 [INFO] [stdout] | [INFO] [stdout] 43 | impl ToolRegistry { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 44 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn register(&mut self, tool: Box) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 56 | pub fn get(&self, name: &str) -> Option<&dyn Tool> { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub fn list(&self) -> Vec { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 67 | fn register_defaults(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BashTool` is never constructed [INFO] [stdout] --> src/tools/bash.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct BashTool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileEditTool` is never constructed [INFO] [stdout] --> src/tools/file_edit.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct FileEditTool; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_FILE_SIZE` is never used [INFO] [stdout] --> src/tools/file_read.rs:9:7 [INFO] [stdout] | [INFO] [stdout] 9 | const MAX_FILE_SIZE: usize = 1024 * 1024; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_LINES` is never used [INFO] [stdout] --> src/tools/file_read.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MAX_LINES: usize = 2000; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileReadTool` is never constructed [INFO] [stdout] --> src/tools/file_read.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct FileReadTool; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_binary` is never used [INFO] [stdout] --> src/tools/file_read.rs:14:4 [INFO] [stdout] | [INFO] [stdout] 14 | fn is_binary(content: &[u8]) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileWriteTool` is never constructed [INFO] [stdout] --> src/tools/file_write.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct FileWriteTool; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `GlobTool` is never constructed [INFO] [stdout] --> src/tools/glob_tool.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct GlobTool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_RESULTS` is never used [INFO] [stdout] --> src/tools/grep_tool.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MAX_RESULTS: usize = 100; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_LINE_LENGTH` is never used [INFO] [stdout] --> src/tools/grep_tool.rs:11:7 [INFO] [stdout] | [INFO] [stdout] 11 | const MAX_LINE_LENGTH: usize = 500; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `GrepTool` is never constructed [INFO] [stdout] --> src/tools/grep_tool.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct GrepTool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_at_bottom` is never used [INFO] [stdout] --> src/tui/message_list.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 20 | impl MessageList { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 81 | pub fn is_at_bottom(&self, max_scroll: usize) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `SPINNER_FRAMES` is never used [INFO] [stdout] --> src/tui/tool_card.rs:9:7 [INFO] [stdout] | [INFO] [stdout] 9 | const SPINNER_FRAMES: &[char] = &['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_EXPANDED_LINES` is never used [INFO] [stdout] --> src/tui/tool_card.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MAX_EXPANDED_LINES: usize = 20; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ToolStatus` is never used [INFO] [stdout] --> src/tui/tool_card.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | pub enum ToolStatus { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolCard` is never constructed [INFO] [stdout] --> src/tui/tool_card.rs:27:12 [INFO] [stdout] | [INFO] [stdout] 27 | pub struct ToolCard { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `render`, `toggle_expand`, `update_status`, and `build_lines` are never used [INFO] [stdout] --> src/tui/tool_card.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl ToolCard { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 35 | /// Create a new card in the `Calling` state. [INFO] [stdout] 36 | pub fn new(call_id: impl Into, tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | pub fn render(&self, f: &mut Frame, area: Rect, tick: usize) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 68 | pub fn toggle_expand(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 73 | pub fn update_status(&mut self, status: ToolStatus) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | fn build_lines(&self, tick: usize) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolCardList` is never constructed [INFO] [stdout] --> src/tui/tool_card.rs:154:12 [INFO] [stdout] | [INFO] [stdout] 154 | pub struct ToolCardList { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `render_all`, and `get_mut` are never used [INFO] [stdout] --> src/tui/tool_card.rs:159:12 [INFO] [stdout] | [INFO] [stdout] 158 | impl ToolCardList { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 159 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 164 | pub fn render_all(f: &mut Frame, area: Rect, cards: &[ToolCard], tick: usize) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 188 | pub fn get_mut(&mut self, call_id: &str) -> Option<&mut ToolCard> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `assistant`, `system`, `tool_call`, and `tool_result` are never used [INFO] [stdout] --> src/types/message.rs:74:12 [INFO] [stdout] | [INFO] [stdout] 62 | impl Message { [INFO] [stdout] | ------------ associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn assistant(text: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub fn system(text: impl Into) -> Self { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 96 | pub fn tool_call(call_id: impl Into, tool_name: impl Into, arguments: serde_json::Value) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 111 | pub fn tool_result(call_id: impl Into, tool_name: impl Into, output: impl Into, is_error: bool) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PermissionMode` is never used [INFO] [stdout] --> src/types/permission.rs:4:10 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum PermissionMode { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PermissionAction` is never used [INFO] [stdout] --> src/types/permission.rs:11:10 [INFO] [stdout] | [INFO] [stdout] 11 | pub enum PermissionAction { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PermissionRule` is never constructed [INFO] [stdout] --> src/types/permission.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct PermissionRule { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `ask`, `allow`, and `deny` are never used [INFO] [stdout] --> src/types/permission.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl PermissionRule { [INFO] [stdout] | ------------------- associated functions in this implementation [INFO] [stdout] 25 | pub fn ask(tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 33 | pub fn allow(tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub fn deny(tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolDef` is never constructed [INFO] [stdout] --> src/types/tool_def.rs:4:12 [INFO] [stdout] | [INFO] [stdout] 4 | pub struct ToolDef { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/types/tool_def.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 10 | impl ToolDef { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] 11 | pub fn new(name: impl Into, description: impl Into, parameters: serde_json::Value) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolResult` is never constructed [INFO] [stdout] --> src/types/tool_def.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct ToolResult { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `ok`, `err`, and `with_metadata` are never used [INFO] [stdout] --> src/types/tool_def.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 27 | impl ToolResult { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 28 | pub fn ok(output: impl Into) -> Self { [INFO] [stdout] | ^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub fn err(output: impl Into) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | pub fn with_metadata(mut self, metadata: serde_json::Value) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 39.01s [INFO] running `Command { std: "docker" "inspect" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling tokio v1.52.0 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling tokio-native-tls v0.3.1 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling backoff v0.4.0 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling h2 v0.4.13 [INFO] [stderr] Compiling hyper v1.9.0 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling hyper-rustls v0.27.9 [INFO] [stderr] Compiling hyper-tls v0.6.0 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling reqwest-eventsource v0.6.0 [INFO] [stderr] Compiling async-openai v0.27.2 [INFO] [stderr] Compiling x-artisan v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tools/bash.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/llm/openai.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut request = CreateChatCompletionRequest { [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `timeout_secs` [INFO] [stdout] --> src/tools/bash.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | let timeout_secs = input["timeout"].as_u64().unwrap_or(120); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_secs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `model` is never read [INFO] [stdout] --> src/llm/anthropic.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct AnthropicProvider { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 12 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicSseEvent` is never used [INFO] [stdout] --> src/llm/anthropic.rs:52:6 [INFO] [stdout] | [INFO] [stdout] 52 | enum AnthropicSseEvent { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicMessageStart` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | struct AnthropicMessageStart { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicInputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct AnthropicInputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicOutputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:73:8 [INFO] [stdout] | [INFO] [stdout] 73 | struct AnthropicOutputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicBlock` is never used [INFO] [stdout] --> src/llm/anthropic.rs:79:6 [INFO] [stdout] | [INFO] [stdout] 79 | enum AnthropicBlock { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicDelta` is never used [INFO] [stdout] --> src/llm/anthropic.rs:86:6 [INFO] [stdout] | [INFO] [stdout] 86 | enum AnthropicDelta { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `model` is never read [INFO] [stdout] --> src/llm/openai.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct OpenAiProvider { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] 18 | client: OpenAiClient, [INFO] [stdout] 19 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tools/bash.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/llm/openai.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut request = CreateChatCompletionRequest { [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `timeout_secs` [INFO] [stdout] --> src/tools/bash.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | let timeout_secs = input["timeout"].as_u64().unwrap_or(120); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_secs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `model` is never read [INFO] [stdout] --> src/llm/anthropic.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct AnthropicProvider { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 12 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicSseEvent` is never used [INFO] [stdout] --> src/llm/anthropic.rs:52:6 [INFO] [stdout] | [INFO] [stdout] 52 | enum AnthropicSseEvent { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicMessageStart` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | struct AnthropicMessageStart { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicInputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct AnthropicInputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicOutputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:73:8 [INFO] [stdout] | [INFO] [stdout] 73 | struct AnthropicOutputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicBlock` is never used [INFO] [stdout] --> src/llm/anthropic.rs:79:6 [INFO] [stdout] | [INFO] [stdout] 79 | enum AnthropicBlock { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicDelta` is never used [INFO] [stdout] --> src/llm/anthropic.rs:86:6 [INFO] [stdout] | [INFO] [stdout] 86 | enum AnthropicDelta { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `model` is never read [INFO] [stdout] --> src/llm/openai.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct OpenAiProvider { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] 18 | client: OpenAiClient, [INFO] [stdout] 19 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tools/bash.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/tools/bash.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/llm/openai.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut request = CreateChatCompletionRequest { [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/llm/openai.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | let mut request = CreateChatCompletionRequest { [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `timeout_secs` [INFO] [stdout] --> src/tools/bash.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | let timeout_secs = input["timeout"].as_u64().unwrap_or(120); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_secs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `timeout_secs` [INFO] [stdout] --> src/tools/bash.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | let timeout_secs = input["timeout"].as_u64().unwrap_or(120); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_secs` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Api` and `Sse` are never constructed [INFO] [stdout] --> src/llm/mod.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 12 | pub enum LlmError { [INFO] [stdout] | -------- variants in this enum [INFO] [stdout] 13 | #[error("API error: {0}")] [INFO] [stdout] 14 | Api(String), [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | Sse(String), [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LlmError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatRequest` is never constructed [INFO] [stdout] --> src/llm/mod.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct ChatRequest { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatMessage` is never constructed [INFO] [stdout] --> src/llm/mod.rs:37:12 [INFO] [stdout] | [INFO] [stdout] 37 | pub struct ChatMessage { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolCallInfo` is never constructed [INFO] [stdout] --> src/llm/mod.rs:47:12 [INFO] [stdout] | [INFO] [stdout] 47 | pub struct ToolCallInfo { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `StreamEvent` is never used [INFO] [stdout] --> src/llm/mod.rs:54:10 [INFO] [stdout] | [INFO] [stdout] 54 | pub enum StreamEvent { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `LlmStream` is never used [INFO] [stdout] --> src/llm/mod.rs:63:10 [INFO] [stdout] | [INFO] [stdout] 63 | pub type LlmStream = Pin> + Send>>; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `chat_stream` and `provider_name` are never used [INFO] [stdout] --> src/llm/mod.rs:67:14 [INFO] [stdout] | [INFO] [stdout] 66 | pub trait LlmClient: Send + Sync { [INFO] [stdout] | --------- methods in this trait [INFO] [stdout] 67 | async fn chat_stream(&self, req: ChatRequest) -> Result; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 68 | fn provider_name(&self) -> &str; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `from_messages` is never used [INFO] [stdout] --> src/llm/mod.rs:84:12 [INFO] [stdout] | [INFO] [stdout] 83 | impl ChatRequest { [INFO] [stdout] | ---------------- associated function in this implementation [INFO] [stdout] 84 | pub fn from_messages(model: &str, messages: &[Message], tools: &[crate::types::tool_def::ToolDef]) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `client`, `api_key`, and `model` are never read [INFO] [stdout] --> src/llm/anthropic.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct AnthropicProvider { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 10 | client: Client, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 11 | api_key: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 12 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicRequest` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:26:8 [INFO] [stdout] | [INFO] [stdout] 26 | struct AnthropicRequest { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicMessage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:38:8 [INFO] [stdout] | [INFO] [stdout] 38 | struct AnthropicMessage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicTool` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:44:8 [INFO] [stdout] | [INFO] [stdout] 44 | struct AnthropicTool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicSseEvent` is never used [INFO] [stdout] --> src/llm/anthropic.rs:52:6 [INFO] [stdout] | [INFO] [stdout] 52 | enum AnthropicSseEvent { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicMessageStart` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | struct AnthropicMessageStart { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicInputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct AnthropicInputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicOutputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:73:8 [INFO] [stdout] | [INFO] [stdout] 73 | struct AnthropicOutputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicBlock` is never used [INFO] [stdout] --> src/llm/anthropic.rs:79:6 [INFO] [stdout] | [INFO] [stdout] 79 | enum AnthropicBlock { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicDelta` is never used [INFO] [stdout] --> src/llm/anthropic.rs:86:6 [INFO] [stdout] | [INFO] [stdout] 86 | enum AnthropicDelta { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `client` and `model` are never read [INFO] [stdout] --> src/llm/openai.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct OpenAiProvider { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 18 | client: OpenAiClient, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 19 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ToolError` is never used [INFO] [stdout] --> src/tools/mod.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | pub enum ToolError { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `Tool` is never used [INFO] [stdout] --> src/tools/mod.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub trait Tool: Send + Sync { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolRegistry` is never constructed [INFO] [stdout] --> src/tools/mod.rs:39:12 [INFO] [stdout] | [INFO] [stdout] 39 | pub struct ToolRegistry { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `register`, `get`, `list`, and `register_defaults` are never used [INFO] [stdout] --> src/tools/mod.rs:44:12 [INFO] [stdout] | [INFO] [stdout] 43 | impl ToolRegistry { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 44 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn register(&mut self, tool: Box) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 56 | pub fn get(&self, name: &str) -> Option<&dyn Tool> { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub fn list(&self) -> Vec { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 67 | fn register_defaults(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BashTool` is never constructed [INFO] [stdout] --> src/tools/bash.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct BashTool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileEditTool` is never constructed [INFO] [stdout] --> src/tools/file_edit.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct FileEditTool; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_FILE_SIZE` is never used [INFO] [stdout] --> src/tools/file_read.rs:9:7 [INFO] [stdout] | [INFO] [stdout] 9 | const MAX_FILE_SIZE: usize = 1024 * 1024; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_LINES` is never used [INFO] [stdout] --> src/tools/file_read.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MAX_LINES: usize = 2000; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileReadTool` is never constructed [INFO] [stdout] --> src/tools/file_read.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct FileReadTool; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_binary` is never used [INFO] [stdout] --> src/tools/file_read.rs:14:4 [INFO] [stdout] | [INFO] [stdout] 14 | fn is_binary(content: &[u8]) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileWriteTool` is never constructed [INFO] [stdout] --> src/tools/file_write.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct FileWriteTool; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `GlobTool` is never constructed [INFO] [stdout] --> src/tools/glob_tool.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct GlobTool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_RESULTS` is never used [INFO] [stdout] --> src/tools/grep_tool.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MAX_RESULTS: usize = 100; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_LINE_LENGTH` is never used [INFO] [stdout] --> src/tools/grep_tool.rs:11:7 [INFO] [stdout] | [INFO] [stdout] 11 | const MAX_LINE_LENGTH: usize = 500; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `GrepTool` is never constructed [INFO] [stdout] --> src/tools/grep_tool.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct GrepTool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_at_bottom` is never used [INFO] [stdout] --> src/tui/message_list.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 20 | impl MessageList { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 81 | pub fn is_at_bottom(&self, max_scroll: usize) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `SPINNER_FRAMES` is never used [INFO] [stdout] --> src/tui/tool_card.rs:9:7 [INFO] [stdout] | [INFO] [stdout] 9 | const SPINNER_FRAMES: &[char] = &['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_EXPANDED_LINES` is never used [INFO] [stdout] --> src/tui/tool_card.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MAX_EXPANDED_LINES: usize = 20; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ToolStatus` is never used [INFO] [stdout] --> src/tui/tool_card.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | pub enum ToolStatus { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolCard` is never constructed [INFO] [stdout] --> src/tui/tool_card.rs:27:12 [INFO] [stdout] | [INFO] [stdout] 27 | pub struct ToolCard { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `render`, `toggle_expand`, `update_status`, and `build_lines` are never used [INFO] [stdout] --> src/tui/tool_card.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl ToolCard { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 35 | /// Create a new card in the `Calling` state. [INFO] [stdout] 36 | pub fn new(call_id: impl Into, tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | pub fn render(&self, f: &mut Frame, area: Rect, tick: usize) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 68 | pub fn toggle_expand(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 73 | pub fn update_status(&mut self, status: ToolStatus) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | fn build_lines(&self, tick: usize) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolCardList` is never constructed [INFO] [stdout] --> src/tui/tool_card.rs:154:12 [INFO] [stdout] | [INFO] [stdout] 154 | pub struct ToolCardList { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `render_all`, and `get_mut` are never used [INFO] [stdout] --> src/tui/tool_card.rs:159:12 [INFO] [stdout] | [INFO] [stdout] 158 | impl ToolCardList { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 159 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 164 | pub fn render_all(f: &mut Frame, area: Rect, cards: &[ToolCard], tick: usize) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 188 | pub fn get_mut(&mut self, call_id: &str) -> Option<&mut ToolCard> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `assistant`, `system`, `tool_call`, and `tool_result` are never used [INFO] [stdout] --> src/types/message.rs:74:12 [INFO] [stdout] | [INFO] [stdout] 62 | impl Message { [INFO] [stdout] | ------------ associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn assistant(text: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub fn system(text: impl Into) -> Self { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 96 | pub fn tool_call(call_id: impl Into, tool_name: impl Into, arguments: serde_json::Value) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 111 | pub fn tool_result(call_id: impl Into, tool_name: impl Into, output: impl Into, is_error: bool) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PermissionMode` is never used [INFO] [stdout] --> src/types/permission.rs:4:10 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum PermissionMode { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PermissionAction` is never used [INFO] [stdout] --> src/types/permission.rs:11:10 [INFO] [stdout] | [INFO] [stdout] 11 | pub enum PermissionAction { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PermissionRule` is never constructed [INFO] [stdout] --> src/types/permission.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct PermissionRule { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `ask`, `allow`, and `deny` are never used [INFO] [stdout] --> src/types/permission.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl PermissionRule { [INFO] [stdout] | ------------------- associated functions in this implementation [INFO] [stdout] 25 | pub fn ask(tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 33 | pub fn allow(tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub fn deny(tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolDef` is never constructed [INFO] [stdout] --> src/types/tool_def.rs:4:12 [INFO] [stdout] | [INFO] [stdout] 4 | pub struct ToolDef { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/types/tool_def.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 10 | impl ToolDef { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] 11 | pub fn new(name: impl Into, description: impl Into, parameters: serde_json::Value) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolResult` is never constructed [INFO] [stdout] --> src/types/tool_def.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct ToolResult { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `ok`, `err`, and `with_metadata` are never used [INFO] [stdout] --> src/types/tool_def.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 27 | impl ToolResult { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 28 | pub fn ok(output: impl Into) -> Self { [INFO] [stdout] | ^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub fn err(output: impl Into) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | pub fn with_metadata(mut self, metadata: serde_json::Value) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Api` and `Sse` are never constructed [INFO] [stdout] --> src/llm/mod.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 12 | pub enum LlmError { [INFO] [stdout] | -------- variants in this enum [INFO] [stdout] 13 | #[error("API error: {0}")] [INFO] [stdout] 14 | Api(String), [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 22 | Sse(String), [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LlmError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatRequest` is never constructed [INFO] [stdout] --> src/llm/mod.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct ChatRequest { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatMessage` is never constructed [INFO] [stdout] --> src/llm/mod.rs:37:12 [INFO] [stdout] | [INFO] [stdout] 37 | pub struct ChatMessage { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolCallInfo` is never constructed [INFO] [stdout] --> src/llm/mod.rs:47:12 [INFO] [stdout] | [INFO] [stdout] 47 | pub struct ToolCallInfo { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `StreamEvent` is never used [INFO] [stdout] --> src/llm/mod.rs:54:10 [INFO] [stdout] | [INFO] [stdout] 54 | pub enum StreamEvent { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `LlmStream` is never used [INFO] [stdout] --> src/llm/mod.rs:63:10 [INFO] [stdout] | [INFO] [stdout] 63 | pub type LlmStream = Pin> + Send>>; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `chat_stream` and `provider_name` are never used [INFO] [stdout] --> src/llm/mod.rs:67:14 [INFO] [stdout] | [INFO] [stdout] 66 | pub trait LlmClient: Send + Sync { [INFO] [stdout] | --------- methods in this trait [INFO] [stdout] 67 | async fn chat_stream(&self, req: ChatRequest) -> Result; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 68 | fn provider_name(&self) -> &str; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `from_messages` is never used [INFO] [stdout] --> src/llm/mod.rs:84:12 [INFO] [stdout] | [INFO] [stdout] 83 | impl ChatRequest { [INFO] [stdout] | ---------------- associated function in this implementation [INFO] [stdout] 84 | pub fn from_messages(model: &str, messages: &[Message], tools: &[crate::types::tool_def::ToolDef]) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `client`, `api_key`, and `model` are never read [INFO] [stdout] --> src/llm/anthropic.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct AnthropicProvider { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 10 | client: Client, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 11 | api_key: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 12 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicRequest` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:26:8 [INFO] [stdout] | [INFO] [stdout] 26 | struct AnthropicRequest { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicMessage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:38:8 [INFO] [stdout] | [INFO] [stdout] 38 | struct AnthropicMessage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicTool` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:44:8 [INFO] [stdout] | [INFO] [stdout] 44 | struct AnthropicTool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicSseEvent` is never used [INFO] [stdout] --> src/llm/anthropic.rs:52:6 [INFO] [stdout] | [INFO] [stdout] 52 | enum AnthropicSseEvent { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicMessageStart` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | struct AnthropicMessageStart { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicInputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct AnthropicInputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnthropicOutputUsage` is never constructed [INFO] [stdout] --> src/llm/anthropic.rs:73:8 [INFO] [stdout] | [INFO] [stdout] 73 | struct AnthropicOutputUsage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicBlock` is never used [INFO] [stdout] --> src/llm/anthropic.rs:79:6 [INFO] [stdout] | [INFO] [stdout] 79 | enum AnthropicBlock { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AnthropicDelta` is never used [INFO] [stdout] --> src/llm/anthropic.rs:86:6 [INFO] [stdout] | [INFO] [stdout] 86 | enum AnthropicDelta { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `client` and `model` are never read [INFO] [stdout] --> src/llm/openai.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct OpenAiProvider { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 18 | client: OpenAiClient, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 19 | model: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ToolError` is never used [INFO] [stdout] --> src/tools/mod.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | pub enum ToolError { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `Tool` is never used [INFO] [stdout] --> src/tools/mod.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub trait Tool: Send + Sync { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolRegistry` is never constructed [INFO] [stdout] --> src/tools/mod.rs:39:12 [INFO] [stdout] | [INFO] [stdout] 39 | pub struct ToolRegistry { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `register`, `get`, `list`, and `register_defaults` are never used [INFO] [stdout] --> src/tools/mod.rs:44:12 [INFO] [stdout] | [INFO] [stdout] 43 | impl ToolRegistry { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 44 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn register(&mut self, tool: Box) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 56 | pub fn get(&self, name: &str) -> Option<&dyn Tool> { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub fn list(&self) -> Vec { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 67 | fn register_defaults(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BashTool` is never constructed [INFO] [stdout] --> src/tools/bash.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct BashTool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileEditTool` is never constructed [INFO] [stdout] --> src/tools/file_edit.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct FileEditTool; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_FILE_SIZE` is never used [INFO] [stdout] --> src/tools/file_read.rs:9:7 [INFO] [stdout] | [INFO] [stdout] 9 | const MAX_FILE_SIZE: usize = 1024 * 1024; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_LINES` is never used [INFO] [stdout] --> src/tools/file_read.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MAX_LINES: usize = 2000; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileReadTool` is never constructed [INFO] [stdout] --> src/tools/file_read.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct FileReadTool; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_binary` is never used [INFO] [stdout] --> src/tools/file_read.rs:14:4 [INFO] [stdout] | [INFO] [stdout] 14 | fn is_binary(content: &[u8]) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileWriteTool` is never constructed [INFO] [stdout] --> src/tools/file_write.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct FileWriteTool; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `GlobTool` is never constructed [INFO] [stdout] --> src/tools/glob_tool.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct GlobTool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_RESULTS` is never used [INFO] [stdout] --> src/tools/grep_tool.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MAX_RESULTS: usize = 100; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_LINE_LENGTH` is never used [INFO] [stdout] --> src/tools/grep_tool.rs:11:7 [INFO] [stdout] | [INFO] [stdout] 11 | const MAX_LINE_LENGTH: usize = 500; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `GrepTool` is never constructed [INFO] [stdout] --> src/tools/grep_tool.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct GrepTool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_at_bottom` is never used [INFO] [stdout] --> src/tui/message_list.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 20 | impl MessageList { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 81 | pub fn is_at_bottom(&self, max_scroll: usize) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `SPINNER_FRAMES` is never used [INFO] [stdout] --> src/tui/tool_card.rs:9:7 [INFO] [stdout] | [INFO] [stdout] 9 | const SPINNER_FRAMES: &[char] = &['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_EXPANDED_LINES` is never used [INFO] [stdout] --> src/tui/tool_card.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MAX_EXPANDED_LINES: usize = 20; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ToolStatus` is never used [INFO] [stdout] --> src/tui/tool_card.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | pub enum ToolStatus { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolCard` is never constructed [INFO] [stdout] --> src/tui/tool_card.rs:27:12 [INFO] [stdout] | [INFO] [stdout] 27 | pub struct ToolCard { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `render`, `toggle_expand`, `update_status`, and `build_lines` are never used [INFO] [stdout] --> src/tui/tool_card.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl ToolCard { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 35 | /// Create a new card in the `Calling` state. [INFO] [stdout] 36 | pub fn new(call_id: impl Into, tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | pub fn render(&self, f: &mut Frame, area: Rect, tick: usize) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 68 | pub fn toggle_expand(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 73 | pub fn update_status(&mut self, status: ToolStatus) { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | fn build_lines(&self, tick: usize) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolCardList` is never constructed [INFO] [stdout] --> src/tui/tool_card.rs:154:12 [INFO] [stdout] | [INFO] [stdout] 154 | pub struct ToolCardList { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `render_all`, and `get_mut` are never used [INFO] [stdout] --> src/tui/tool_card.rs:159:12 [INFO] [stdout] | [INFO] [stdout] 158 | impl ToolCardList { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 159 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 164 | pub fn render_all(f: &mut Frame, area: Rect, cards: &[ToolCard], tick: usize) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 188 | pub fn get_mut(&mut self, call_id: &str) -> Option<&mut ToolCard> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `assistant`, `system`, `tool_call`, and `tool_result` are never used [INFO] [stdout] --> src/types/message.rs:74:12 [INFO] [stdout] | [INFO] [stdout] 62 | impl Message { [INFO] [stdout] | ------------ associated functions in this implementation [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn assistant(text: impl Into) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub fn system(text: impl Into) -> Self { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 96 | pub fn tool_call(call_id: impl Into, tool_name: impl Into, arguments: serde_json::Value) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 111 | pub fn tool_result(call_id: impl Into, tool_name: impl Into, output: impl Into, is_error: bool) -> Self { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PermissionMode` is never used [INFO] [stdout] --> src/types/permission.rs:4:10 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum PermissionMode { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PermissionAction` is never used [INFO] [stdout] --> src/types/permission.rs:11:10 [INFO] [stdout] | [INFO] [stdout] 11 | pub enum PermissionAction { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PermissionRule` is never constructed [INFO] [stdout] --> src/types/permission.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct PermissionRule { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `ask`, `allow`, and `deny` are never used [INFO] [stdout] --> src/types/permission.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl PermissionRule { [INFO] [stdout] | ------------------- associated functions in this implementation [INFO] [stdout] 25 | pub fn ask(tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 33 | pub fn allow(tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub fn deny(tool_name: impl Into) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolDef` is never constructed [INFO] [stdout] --> src/types/tool_def.rs:4:12 [INFO] [stdout] | [INFO] [stdout] 4 | pub struct ToolDef { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/types/tool_def.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 10 | impl ToolDef { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] 11 | pub fn new(name: impl Into, description: impl Into, parameters: serde_json::Value) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ToolResult` is never constructed [INFO] [stdout] --> src/types/tool_def.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct ToolResult { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `ok`, `err`, and `with_metadata` are never used [INFO] [stdout] --> src/types/tool_def.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 27 | impl ToolResult { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 28 | pub fn ok(output: impl Into) -> Self { [INFO] [stdout] | ^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub fn err(output: impl Into) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | pub fn with_metadata(mut self, metadata: serde_json::Value) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 17.47s [INFO] running `Command { std: "docker" "inspect" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }` [INFO] [stderr] warning: unused import: `std::time::Duration` [INFO] [stderr] --> src/tools/bash.rs:3:5 [INFO] [stderr] | [INFO] [stderr] 3 | use std::time::Duration; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/llm/openai.rs:104:13 [INFO] [stderr] | [INFO] [stderr] 104 | let mut request = CreateChatCompletionRequest { [INFO] [stderr] | ----^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `timeout_secs` [INFO] [stderr] --> src/tools/bash.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | let timeout_secs = input["timeout"].as_u64().unwrap_or(120); [INFO] [stderr] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_secs` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: field `model` is never read [INFO] [stderr] --> src/llm/anthropic.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 9 | pub struct AnthropicProvider { [INFO] [stderr] | ----------------- field in this struct [INFO] [stderr] ... [INFO] [stderr] 12 | model: String, [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: enum `AnthropicSseEvent` is never used [INFO] [stderr] --> src/llm/anthropic.rs:52:6 [INFO] [stderr] | [INFO] [stderr] 52 | enum AnthropicSseEvent { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AnthropicMessageStart` is never constructed [INFO] [stderr] --> src/llm/anthropic.rs:63:8 [INFO] [stderr] | [INFO] [stderr] 63 | struct AnthropicMessageStart { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AnthropicInputUsage` is never constructed [INFO] [stderr] --> src/llm/anthropic.rs:68:8 [INFO] [stderr] | [INFO] [stderr] 68 | struct AnthropicInputUsage { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AnthropicOutputUsage` is never constructed [INFO] [stderr] --> src/llm/anthropic.rs:73:8 [INFO] [stderr] | [INFO] [stderr] 73 | struct AnthropicOutputUsage { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `AnthropicBlock` is never used [INFO] [stderr] --> src/llm/anthropic.rs:79:6 [INFO] [stderr] | [INFO] [stderr] 79 | enum AnthropicBlock { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `AnthropicDelta` is never used [INFO] [stderr] --> src/llm/anthropic.rs:86:6 [INFO] [stderr] | [INFO] [stderr] 86 | enum AnthropicDelta { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field `model` is never read [INFO] [stderr] --> src/llm/openai.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 17 | pub struct OpenAiProvider { [INFO] [stderr] | -------------- field in this struct [INFO] [stderr] 18 | client: OpenAiClient, [INFO] [stderr] 19 | model: String, [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `x-artisan` (lib) generated 11 warnings (run `cargo fix --lib -p x-artisan` to apply 3 suggestions) [INFO] [stderr] warning: `x-artisan` (lib test) generated 11 warnings (11 duplicates) [INFO] [stderr] warning: variants `Api` and `Sse` are never constructed [INFO] [stderr] --> src/llm/mod.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 12 | pub enum LlmError { [INFO] [stderr] | -------- variants in this enum [INFO] [stderr] 13 | #[error("API error: {0}")] [INFO] [stderr] 14 | Api(String), [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 22 | Sse(String), [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: `LlmError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: struct `ChatRequest` is never constructed [INFO] [stderr] --> src/llm/mod.rs:28:12 [INFO] [stderr] | [INFO] [stderr] 28 | pub struct ChatRequest { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ChatMessage` is never constructed [INFO] [stderr] --> src/llm/mod.rs:37:12 [INFO] [stderr] | [INFO] [stderr] 37 | pub struct ChatMessage { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ToolCallInfo` is never constructed [INFO] [stderr] --> src/llm/mod.rs:47:12 [INFO] [stderr] | [INFO] [stderr] 47 | pub struct ToolCallInfo { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `StreamEvent` is never used [INFO] [stderr] --> src/llm/mod.rs:54:10 [INFO] [stderr] | [INFO] [stderr] 54 | pub enum StreamEvent { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: type alias `LlmStream` is never used [INFO] [stderr] --> src/llm/mod.rs:63:10 [INFO] [stderr] | [INFO] [stderr] 63 | pub type LlmStream = Pin> + Send>>; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: methods `chat_stream` and `provider_name` are never used [INFO] [stderr] --> src/llm/mod.rs:67:14 [INFO] [stderr] | [INFO] [stderr] 66 | pub trait LlmClient: Send + Sync { [INFO] [stderr] | --------- methods in this trait [INFO] [stderr] 67 | async fn chat_stream(&self, req: ChatRequest) -> Result; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] 68 | fn provider_name(&self) -> &str; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated function `from_messages` is never used [INFO] [stderr] --> src/llm/mod.rs:84:12 [INFO] [stderr] | [INFO] [stderr] 83 | impl ChatRequest { [INFO] [stderr] | ---------------- associated function in this implementation [INFO] [stderr] 84 | pub fn from_messages(model: &str, messages: &[Message], tools: &[crate::types::tool_def::ToolDef]) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: fields `client`, `api_key`, and `model` are never read [INFO] [stderr] --> src/llm/anthropic.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 9 | pub struct AnthropicProvider { [INFO] [stderr] | ----------------- fields in this struct [INFO] [stderr] 10 | client: Client, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] 11 | api_key: String, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] 12 | model: String, [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AnthropicRequest` is never constructed [INFO] [stderr] --> src/llm/anthropic.rs:26:8 [INFO] [stderr] | [INFO] [stderr] 26 | struct AnthropicRequest { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AnthropicMessage` is never constructed [INFO] [stderr] --> src/llm/anthropic.rs:38:8 [INFO] [stderr] | [INFO] [stderr] 38 | struct AnthropicMessage { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AnthropicTool` is never constructed [INFO] [stderr] --> src/llm/anthropic.rs:44:8 [INFO] [stderr] | [INFO] [stderr] 44 | struct AnthropicTool { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: fields `client` and `model` are never read [INFO] [stderr] --> src/llm/openai.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 17 | pub struct OpenAiProvider { [INFO] [stderr] | -------------- fields in this struct [INFO] [stderr] 18 | client: OpenAiClient, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] 19 | model: String, [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `ToolError` is never used [INFO] [stderr] --> src/tools/mod.rs:14:10 [INFO] [stderr] | [INFO] [stderr] 14 | pub enum ToolError { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: trait `Tool` is never used [INFO] [stderr] --> src/tools/mod.rs:28:11 [INFO] [stderr] | [INFO] [stderr] 28 | pub trait Tool: Send + Sync { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ToolRegistry` is never constructed [INFO] [stderr] --> src/tools/mod.rs:39:12 [INFO] [stderr] | [INFO] [stderr] 39 | pub struct ToolRegistry { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `register`, `get`, `list`, and `register_defaults` are never used [INFO] [stderr] --> src/tools/mod.rs:44:12 [INFO] [stderr] | [INFO] [stderr] 43 | impl ToolRegistry { [INFO] [stderr] | ----------------- associated items in this implementation [INFO] [stderr] 44 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 52 | pub fn register(&mut self, tool: Box) { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 56 | pub fn get(&self, name: &str) -> Option<&dyn Tool> { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 60 | pub fn list(&self) -> Vec { [INFO] [stderr] | ^^^^ [INFO] [stderr] ... [INFO] [stderr] 67 | fn register_defaults(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `BashTool` is never constructed [INFO] [stderr] --> src/tools/bash.rs:9:12 [INFO] [stderr] | [INFO] [stderr] 9 | pub struct BashTool; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `FileEditTool` is never constructed [INFO] [stderr] --> src/tools/file_edit.rs:9:12 [INFO] [stderr] | [INFO] [stderr] 9 | pub struct FileEditTool; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `MAX_FILE_SIZE` is never used [INFO] [stderr] --> src/tools/file_read.rs:9:7 [INFO] [stderr] | [INFO] [stderr] 9 | const MAX_FILE_SIZE: usize = 1024 * 1024; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `MAX_LINES` is never used [INFO] [stderr] --> src/tools/file_read.rs:10:7 [INFO] [stderr] | [INFO] [stderr] 10 | const MAX_LINES: usize = 2000; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `FileReadTool` is never constructed [INFO] [stderr] --> src/tools/file_read.rs:12:12 [INFO] [stderr] | [INFO] [stderr] 12 | pub struct FileReadTool; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `is_binary` is never used [INFO] [stderr] --> src/tools/file_read.rs:14:4 [INFO] [stderr] | [INFO] [stderr] 14 | fn is_binary(content: &[u8]) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `FileWriteTool` is never constructed [INFO] [stderr] --> src/tools/file_write.rs:9:12 [INFO] [stderr] | [INFO] [stderr] 9 | pub struct FileWriteTool; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `GlobTool` is never constructed [INFO] [stderr] --> src/tools/glob_tool.rs:8:12 [INFO] [stderr] | [INFO] [stderr] 8 | pub struct GlobTool; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `MAX_RESULTS` is never used [INFO] [stderr] --> src/tools/grep_tool.rs:10:7 [INFO] [stderr] | [INFO] [stderr] 10 | const MAX_RESULTS: usize = 100; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `MAX_LINE_LENGTH` is never used [INFO] [stderr] --> src/tools/grep_tool.rs:11:7 [INFO] [stderr] | [INFO] [stderr] 11 | const MAX_LINE_LENGTH: usize = 500; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `GrepTool` is never constructed [INFO] [stderr] --> src/tools/grep_tool.rs:13:12 [INFO] [stderr] | [INFO] [stderr] 13 | pub struct GrepTool; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method `is_at_bottom` is never used [INFO] [stderr] --> src/tui/message_list.rs:81:12 [INFO] [stderr] | [INFO] [stderr] 20 | impl MessageList { [INFO] [stderr] | ---------------- method in this implementation [INFO] [stderr] ... [INFO] [stderr] 81 | pub fn is_at_bottom(&self, max_scroll: usize) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `SPINNER_FRAMES` is never used [INFO] [stderr] --> src/tui/tool_card.rs:9:7 [INFO] [stderr] | [INFO] [stderr] 9 | const SPINNER_FRAMES: &[char] = &['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `MAX_EXPANDED_LINES` is never used [INFO] [stderr] --> src/tui/tool_card.rs:10:7 [INFO] [stderr] | [INFO] [stderr] 10 | const MAX_EXPANDED_LINES: usize = 20; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `ToolStatus` is never used [INFO] [stderr] --> src/tui/tool_card.rs:14:10 [INFO] [stderr] | [INFO] [stderr] 14 | pub enum ToolStatus { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ToolCard` is never constructed [INFO] [stderr] --> src/tui/tool_card.rs:27:12 [INFO] [stderr] | [INFO] [stderr] 27 | pub struct ToolCard { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `render`, `toggle_expand`, `update_status`, and `build_lines` are never used [INFO] [stderr] --> src/tui/tool_card.rs:36:12 [INFO] [stderr] | [INFO] [stderr] 34 | impl ToolCard { [INFO] [stderr] | ------------- associated items in this implementation [INFO] [stderr] 35 | /// Create a new card in the `Calling` state. [INFO] [stderr] 36 | pub fn new(call_id: impl Into, tool_name: impl Into) -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 49 | pub fn render(&self, f: &mut Frame, area: Rect, tick: usize) { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 68 | pub fn toggle_expand(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 73 | pub fn update_status(&mut self, status: ToolStatus) { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 77 | fn build_lines(&self, tick: usize) -> Vec> { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ToolCardList` is never constructed [INFO] [stderr] --> src/tui/tool_card.rs:154:12 [INFO] [stderr] | [INFO] [stderr] 154 | pub struct ToolCardList { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `render_all`, and `get_mut` are never used [INFO] [stderr] --> src/tui/tool_card.rs:159:12 [INFO] [stderr] | [INFO] [stderr] 158 | impl ToolCardList { [INFO] [stderr] | ----------------- associated items in this implementation [INFO] [stderr] 159 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 164 | pub fn render_all(f: &mut Frame, area: Rect, cards: &[ToolCard], tick: usize) { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 188 | pub fn get_mut(&mut self, call_id: &str) -> Option<&mut ToolCard> { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated functions `assistant`, `system`, `tool_call`, and `tool_result` are never used [INFO] [stderr] --> src/types/message.rs:74:12 [INFO] [stderr] | [INFO] [stderr] 62 | impl Message { [INFO] [stderr] | ------------ associated functions in this implementation [INFO] [stderr] ... [INFO] [stderr] 74 | pub fn assistant(text: impl Into) -> Self { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 85 | pub fn system(text: impl Into) -> Self { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 96 | pub fn tool_call(call_id: impl Into, tool_name: impl Into, arguments: serde_json::Value) -> Self { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 111 | pub fn tool_result(call_id: impl Into, tool_name: impl Into, output: impl Into, is_error: bool) -> Self { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `PermissionMode` is never used [INFO] [stderr] --> src/types/permission.rs:4:10 [INFO] [stderr] | [INFO] [stderr] 4 | pub enum PermissionMode { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `PermissionAction` is never used [INFO] [stderr] --> src/types/permission.rs:11:10 [INFO] [stderr] | [INFO] [stderr] 11 | pub enum PermissionAction { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `PermissionRule` is never constructed [INFO] [stderr] --> src/types/permission.rs:18:12 [INFO] [stderr] | [INFO] [stderr] 18 | pub struct PermissionRule { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated functions `ask`, `allow`, and `deny` are never used [INFO] [stderr] --> src/types/permission.rs:25:12 [INFO] [stderr] | [INFO] [stderr] 24 | impl PermissionRule { [INFO] [stderr] | ------------------- associated functions in this implementation [INFO] [stderr] 25 | pub fn ask(tool_name: impl Into) -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 33 | pub fn allow(tool_name: impl Into) -> Self { [INFO] [stderr] | ^^^^^ [INFO] [stderr] ... [INFO] [stderr] 41 | pub fn deny(tool_name: impl Into) -> Self { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ToolDef` is never constructed [INFO] [stderr] --> src/types/tool_def.rs:4:12 [INFO] [stderr] | [INFO] [stderr] 4 | pub struct ToolDef { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated function `new` is never used [INFO] [stderr] --> src/types/tool_def.rs:11:12 [INFO] [stderr] | [INFO] [stderr] 10 | impl ToolDef { [INFO] [stderr] | ------------ associated function in this implementation [INFO] [stderr] 11 | pub fn new(name: impl Into, description: impl Into, parameters: serde_json::Value) -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ToolResult` is never constructed [INFO] [stderr] --> src/types/tool_def.rs:21:12 [INFO] [stderr] | [INFO] [stderr] 21 | pub struct ToolResult { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `ok`, `err`, and `with_metadata` are never used [INFO] [stderr] --> src/types/tool_def.rs:28:12 [INFO] [stderr] | [INFO] [stderr] 27 | impl ToolResult { [INFO] [stderr] | --------------- associated items in this implementation [INFO] [stderr] 28 | pub fn ok(output: impl Into) -> Self { [INFO] [stderr] | ^^ [INFO] [stderr] ... [INFO] [stderr] 36 | pub fn err(output: impl Into) -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 44 | pub fn with_metadata(mut self, metadata: serde_json::Value) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `x-artisan` (bin "x-artisan") generated 54 warnings (9 duplicates) [INFO] [stderr] warning: `x-artisan` (bin "x-artisan" test) generated 54 warnings (54 duplicates) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.22s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/x_artisan-99bf5e03f26a982c) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/x_artisan-b5e4b079ebb96626) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running tests/test_input_bar.rs (/opt/rustwide/target/debug/deps/test_input_bar-8fbec22bbff1d5e3) [INFO] [stdout] [INFO] [stdout] running 33 tests [INFO] [stdout] test test_default_equivalent_to_new ... ok [INFO] [stdout] test test_emoji_input_round_trip ... ok [INFO] [stdout] test test_handle_key_backspace_deletes ... ok [INFO] [stdout] test test_handle_key_ctrl_c_is_forwarded ... ok [INFO] [stdout] test test_handle_key_forwards_enter_as_newline ... ok [INFO] [stdout] test test_handle_key_special_characters ... ok [INFO] [stdout] test test_history_down_at_newest_boundary_noop ... ok [INFO] [stdout] test test_history_down_boundary_retains_textarea_at_newest ... ok [INFO] [stdout] test test_history_down_boundary_stops_at_newest ... ok [INFO] [stdout] test test_history_down_from_middle_to_newest ... ok [INFO] [stdout] test test_history_down_returns_toward_newer ... ok [INFO] [stdout] test test_history_down_steps_correctly ... ok [INFO] [stdout] test test_history_down_without_prior_up_noop ... ok [INFO] [stdout] test test_history_up_boundary_stays_on_oldest ... ok [INFO] [stdout] test test_history_up_gets_newest ... ok [INFO] [stdout] test test_history_up_gets_oldest ... ok [INFO] [stdout] test test_history_up_on_empty_does_not_panic ... ok [INFO] [stdout] test test_mixed_unicode_and_ascii ... ok [INFO] [stdout] test test_multiple_recalls_all_return_same_text ... ok [INFO] [stdout] test test_many_entries_all_up_presses_get_correct ... ok [INFO] [stdout] test test_recall_and_resubmit_same_text ... ok [INFO] [stdout] test test_new_creates_input_bar ... ok [INFO] [stdout] test test_render_does_not_panic ... ok [INFO] [stdout] test test_submit_does_not_record_empty_input ... ok [INFO] [stdout] test test_submit_empty_returns_none ... ok [INFO] [stdout] test test_submit_clears_textarea_for_reuse ... ok [INFO] [stdout] test test_submit_multiline_joins_without_separator ... ok [INFO] [stdout] test test_submit_non_empty_returns_some ... ok [INFO] [stdout] test test_submit_preserves_internal_spaces ... ok [INFO] [stdout] test test_submit_tabs_only_returns_none ... ok [INFO] [stdout] test test_submit_records_in_history_retrievable_by_up ... ok [INFO] [stdout] test test_submit_whitespace_only_returns_none ... ok [INFO] [stdout] test test_unicode_input_round_trip ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 33 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running tests/test_message_list.rs (/opt/rustwide/target/debug/deps/test_message_list-82cc2b5d54ee7874) [INFO] [stdout] [INFO] [stdout] running 22 tests [INFO] [stdout] test test_handle_key_down_from_zero ... ok [INFO] [stdout] test test_default_equivalent_to_new ... ok [INFO] [stdout] test test_handle_key_down_increments_scroll ... ok [INFO] [stdout] test test_handle_key_escape_no_effect ... ok [INFO] [stdout] test test_handle_key_left_right_no_effect ... ok [INFO] [stdout] test test_handle_key_multiple_downs_accumulates ... ok [INFO] [stdout] test test_handle_key_multiple_ups_stops_at_zero ... ok [INFO] [stdout] test test_handle_key_unrelated_key_no_op ... ok [INFO] [stdout] test test_handle_key_up_at_zero_does_not_underflow ... ok [INFO] [stdout] test test_handle_key_up_decrements_scroll ... ok [INFO] [stdout] test test_is_at_bottom_offset_greater_than_max ... ok [INFO] [stdout] test test_is_at_bottom_offset_less_than_max ... ok [INFO] [stdout] test test_is_at_bottom_offset_equals_max ... ok [INFO] [stdout] test test_is_at_bottom_usize_max_offset ... ok [INFO] [stdout] test test_is_at_bottom_zero_offset_zero_max ... ok [INFO] [stdout] test test_new_initializes_at_bottom ... ok [INFO] [stdout] test test_scroll_down_from_usize_max_does_not_wrap ... ok [INFO] [stdout] test test_scroll_down_past_bottom_then_check ... ok [INFO] [stdout] test test_scroll_to_bottom_from_already_bottom ... ok [INFO] [stdout] test test_scroll_to_bottom_resets_to_saturating_max ... ok [INFO] [stdout] test test_scroll_up_from_usize_max_decrements ... ok [INFO] [stdout] test test_scroll_up_then_scroll_to_bottom ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 22 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running tests/test_tool_card.rs (/opt/rustwide/target/debug/deps/test_tool_card-f78f5354b6989c32) [INFO] [stdout] [INFO] [stdout] running 41 tests [INFO] [stdout] test card_list_default_is_empty ... ok [INFO] [stdout] test card_list_get_mut_can_modify_card ... ok [INFO] [stdout] test card_list_get_mut_finds_first_match_on_duplicate_id ... ok [INFO] [stdout] test card_list_get_mut_returns_none_for_missing_id ... ok [INFO] [stdout] test card_list_get_mut_returns_none_when_empty ... ok [INFO] [stdout] test card_list_get_mut_update_various_statuses ... ok [INFO] [stdout] test card_list_multiple_cards_ordered ... ok [INFO] [stdout] test card_list_many_cards ... ok [INFO] [stdout] test card_list_new_is_empty ... ok [INFO] [stdout] test card_list_update_and_toggle_chained_via_get_mut ... ok [INFO] [stdout] test card_list_push_and_lookup ... ok [INFO] [stdout] test completed_empty_output ... ok [INFO] [stdout] test completed_multiline_output_line_count ... ok [INFO] [stdout] test completed_many_lines_exceeds_max_expanded ... ok [INFO] [stdout] test completed_single_line_output ... ok [INFO] [stdout] test completed_unicode_output ... ok [INFO] [stdout] test empty_tool_name ... ok [INFO] [stdout] test failed_empty_error ... ok [INFO] [stdout] test new_creates_calling_card ... ok [INFO] [stdout] test failed_unicode_error ... ok [INFO] [stdout] test new_starting_is_not_expanded ... ok [INFO] [stdout] test empty_call_id ... ok [INFO] [stdout] test completed_very_long_output ... ok [INFO] [stdout] test new_accepts_string_types ... ok [INFO] [stdout] test new_with_unicode_names ... ok [INFO] [stdout] test toggle_expand_flips_true_to_false ... ok [INFO] [stdout] test toggle_expand_ten_times_even ... ok [INFO] [stdout] test tool_status_clone_is_independent ... ok [INFO] [stdout] test toggle_expand_preserves_status ... ok [INFO] [stdout] test tool_status_completed_byte_size ... ok [INFO] [stdout] test toggle_expand_flips_false_to_true ... ok [INFO] [stdout] test tool_status_running_elapsed_sub_second ... ok [INFO] [stdout] test toggle_expand_three_times ... ok [INFO] [stdout] test update_status_long_duration ... ok [INFO] [stdout] test tool_card_clone_is_independent ... ok [INFO] [stdout] test update_status_to_completed ... ok [INFO] [stdout] test update_status_to_failed ... ok [INFO] [stdout] test update_status_full_lifecycle ... ok [INFO] [stdout] test update_status_to_running ... ok [INFO] [stdout] test update_status_preserves_other_fields ... ok [INFO] [stdout] test update_status_zero_elapsed ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 41 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running tests/test_tui_app_and_render.rs (/opt/rustwide/target/debug/deps/test_tui_app_and_render-cb5af5416f8c6bbe) [INFO] [stdout] [INFO] [stdout] running 31 tests [INFO] [stdout] test app_can_store_user_messages ... ok [INFO] [stdout] test app_model_some_produces_correct_title ... ok [INFO] [stdout] test app_model_none_produces_unknown_in_title ... ok [INFO] [stdout] test app_new_repeated_calls_independent ... ok [INFO] [stdout] test new_with_empty_string_model_accepts_empty ... ok [INFO] [stdout] test new_with_claude_model_stores_correctly ... ok [INFO] [stdout] test new_with_model_creates_empty_messages ... ok [INFO] [stdout] test new_with_model_sets_should_quit_false ... ok [INFO] [stdout] test new_with_none_creates_empty_messages_vec ... ok [INFO] [stdout] test new_with_none_defaults_to_unknown ... ok [INFO] [stdout] test new_with_none_initializes_should_quit_false ... ok [INFO] [stdout] test new_with_some_model_stores_model_name ... ok [INFO] [stdout] test new_with_unicode_model_name ... ok [INFO] [stdout] test new_with_whitespace_model_name ... ok [INFO] [stdout] test status_bar_contains_history_shortcut ... ok [INFO] [stdout] test status_bar_contains_quit_shortcut ... ok [INFO] [stdout] test status_bar_contains_scroll_shortcut ... ok [INFO] [stdout] test status_bar_contains_send_shortcut ... ok [INFO] [stdout] test status_bar_is_independent_of_app_state ... ok [INFO] [stdout] test status_bar_exact_text ... ok [INFO] [stdout] test status_bar_leading_space ... ok [INFO] [stdout] test status_bar_uses_pipe_separator ... ok [INFO] [stdout] test title_bar_contains_app_name_and_version ... ok [INFO] [stdout] test title_bar_contains_model_info ... ok [INFO] [stdout] test title_bar_format_with_custom_model ... ok [INFO] [stdout] test title_bar_with_newline_in_model ... ok [INFO] [stdout] test title_bar_leading_space_before_app_name ... ok [INFO] [stdout] test title_bar_format_with_default_unknown_model ... ok [INFO] [stdout] test title_bar_trailing_space_after_model ... ok [INFO] [stdout] test title_bar_with_very_long_model_name ... ok [INFO] [stdout] test title_bar_with_null_byte_in_model ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 31 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Doc-tests x_artisan [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64", kill_on_drop: false }` [INFO] [stdout] 9b3b47b212a9ff5897c69bdee6f43a47c4765be895b1646b92bbea2473bc5a64