[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.97.0-beta.6 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxartifact%2Fx-artisan" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/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-1-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/xartifact/x-artisan on toolchain 1.97.0-beta.6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "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.97.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[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 rustls-webpki v0.103.12
[INFO] [stderr]   Downloaded openssl-sys v0.9.113
[INFO] [stderr]   Downloaded async-openai v0.27.2
[INFO] [stderr]   Downloaded openssl v0.10.77
[INFO] [stderr]   Downloaded rustls v0.23.38
[INFO] [stderr]   Downloaded tokio v1.52.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/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] 27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039
[INFO] running `Command { std: "docker" "start" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039", 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" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039", 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" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.185
[INFO] [stderr]    Compiling cc v1.2.60
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling hashbrown v0.17.0
[INFO] [stderr]    Compiling openssl v0.10.77
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]    Compiling rustls v0.23.38
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]    Compiling unicase v2.9.0
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]    Compiling lru v0.12.5
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling instant v0.1.13
[INFO] [stderr]    Compiling cassowary v0.3.0
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling compact_str v0.8.1
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling tokio v1.52.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling eventsource-stream v0.2.3
[INFO] [stderr]    Compiling openssl-sys v0.9.113
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling unicode-truncate v1.1.0
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling env_home v0.1.0
[INFO] [stderr]    Compiling uuid v1.23.1
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling shell-words v1.1.1
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling serde v1.0.228
[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 futures-executor v0.3.32
[INFO] [stderr]    Compiling ratatui v0.29.0
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling which v7.0.3
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling secrecy v0.10.3
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling derive_builder_macro v0.20.2
[INFO] [stderr]    Compiling derive_builder v0.20.2
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling tui-textarea v0.7.0
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling rustls-webpki v0.103.12
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[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 tokio-rustls v0.26.4
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[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<OpenAIConfig>,
[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<Box<dyn Stream<Item = Result<StreamEvent, LlmError>> + 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<LlmStream, LlmError>;
[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<OpenAIConfig>,
[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<dyn Tool>) {
[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<ToolDef> {
[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<String>, tool_name: impl Into<String>) -> 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<Line<'static>> {
[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<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn system(text: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn tool_call(call_id: impl Into<String>, tool_name: impl Into<String>, arguments: serde_json::Value) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn tool_result(call_id: impl Into<String>, tool_name: impl Into<String>, output: impl Into<String>, 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<String>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn allow(tool_name: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn deny(tool_name: impl Into<String>) -> 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<String>, description: impl Into<String>, 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<String>) -> Self {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn err(output: impl Into<String>) -> 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 1m 33s
[INFO] running `Command { std: "docker" "inspect" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039", 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" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "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 tower v0.5.3
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[INFO] [stderr]    Compiling tokio-stream v0.1.18
[INFO] [stderr]    Compiling backoff v0.4.0
[INFO] [stderr]    Compiling h2 v0.4.13
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[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: 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<OpenAIConfig>,
[INFO] [stdout] 19 |     model: String,
[INFO] [stdout]    |     ^^^^^
[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<OpenAIConfig>,
[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: 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<Box<dyn Stream<Item = Result<StreamEvent, LlmError>> + 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<LlmStream, LlmError>;
[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<OpenAIConfig>,
[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<dyn Tool>) {
[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<ToolDef> {
[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<String>, tool_name: impl Into<String>) -> 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<Line<'static>> {
[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<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn system(text: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn tool_call(call_id: impl Into<String>, tool_name: impl Into<String>, arguments: serde_json::Value) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn tool_result(call_id: impl Into<String>, tool_name: impl Into<String>, output: impl Into<String>, 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<String>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn allow(tool_name: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn deny(tool_name: impl Into<String>) -> 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<String>, description: impl Into<String>, 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<String>) -> Self {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn err(output: impl Into<String>) -> 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: 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<Box<dyn Stream<Item = Result<StreamEvent, LlmError>> + 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<LlmStream, LlmError>;
[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<OpenAIConfig>,
[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<dyn Tool>) {
[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<ToolDef> {
[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<String>, tool_name: impl Into<String>) -> 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<Line<'static>> {
[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<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn system(text: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn tool_call(call_id: impl Into<String>, tool_name: impl Into<String>, arguments: serde_json::Value) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn tool_result(call_id: impl Into<String>, tool_name: impl Into<String>, output: impl Into<String>, 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<String>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn allow(tool_name: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn deny(tool_name: impl Into<String>) -> 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<String>, description: impl Into<String>, 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<String>) -> Self {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn err(output: impl Into<String>) -> 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 47.81s
[INFO] running `Command { std: "docker" "inspect" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039", 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" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "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<OpenAIConfig>,
[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<Box<dyn Stream<Item = Result<StreamEvent, LlmError>> + 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<LlmStream, LlmError>;
[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<OpenAIConfig>,
[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<dyn Tool>) {
[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<ToolDef> {
[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<String>, tool_name: impl Into<String>) -> 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<Line<'static>> {
[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<String>) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub fn system(text: impl Into<String>) -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  96 |     pub fn tool_call(call_id: impl Into<String>, tool_name: impl Into<String>, arguments: serde_json::Value) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 111 |     pub fn tool_result(call_id: impl Into<String>, tool_name: impl Into<String>, output: impl Into<String>, 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<String>) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 33 |     pub fn allow(tool_name: impl Into<String>) -> Self {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     pub fn deny(tool_name: impl Into<String>) -> 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<String>, description: impl Into<String>, 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<String>) -> Self {
[INFO] [stderr]    |            ^^
[INFO] [stderr] ...
[INFO] [stderr] 36 |     pub fn err(output: impl Into<String>) -> 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.48s
[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] [stderr]      Running tests/test_input_bar.rs (/opt/rustwide/target/debug/deps/test_input_bar-8fbec22bbff1d5e3)
[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] [stdout] 
[INFO] [stdout] running 33 tests
[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_default_equivalent_to_new ... ok
[INFO] [stdout] test test_emoji_input_round_trip ... 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_returns_toward_newer ... ok
[INFO] [stdout] test test_history_down_from_middle_to_newest ... ok
[INFO] [stdout] test test_history_down_without_prior_up_noop ... ok
[INFO] [stdout] test test_history_up_gets_newest ... ok
[INFO] [stdout] test test_history_up_on_empty_does_not_panic ... ok
[INFO] [stdout] test test_history_up_gets_oldest ... ok
[INFO] [stdout] test test_new_creates_input_bar ... ok
[INFO] [stdout] test test_history_down_at_newest_boundary_noop ... ok
[INFO] [stdout] test test_recall_and_resubmit_same_text ... ok
[INFO] [stdout] test test_history_down_steps_correctly ... ok
[INFO] [stdout] test test_history_up_boundary_stays_on_oldest ... ok
[INFO] [stdout] test test_mixed_unicode_and_ascii ... ok
[INFO] [stdout] test test_submit_does_not_record_empty_input ... ok
[INFO] [stdout] test test_many_entries_all_up_presses_get_correct ... ok
[INFO] [stdout] test test_submit_clears_textarea_for_reuse ... ok
[INFO] [stdout] test test_submit_empty_returns_none ... ok
[INFO] [stdout] test test_submit_preserves_internal_spaces ... ok
[INFO] [stdout] test test_submit_multiline_joins_without_separator ... ok
[INFO] [stdout] test test_submit_records_in_history_retrievable_by_up ... ok
[INFO] [stdout] test test_submit_tabs_only_returns_none ... ok
[INFO] [stdout] test test_submit_whitespace_only_returns_none ... ok
[INFO] [stdout] test test_submit_non_empty_returns_some ... ok
[INFO] [stdout] test test_multiple_recalls_all_return_same_text ... ok
[INFO] [stdout] test test_unicode_input_round_trip ... ok
[INFO] [stdout] test test_handle_key_special_characters ... ok
[INFO] [stdout] test test_render_does_not_panic ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 33 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[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] [stderr]      Running tests/test_tool_card.rs (/opt/rustwide/target/debug/deps/test_tool_card-f78f5354b6989c32)
[INFO] [stdout] test test_default_equivalent_to_new ... ok
[INFO] [stdout] test test_handle_key_down_from_zero ... ok
[INFO] [stdout] test test_handle_key_down_increments_scroll ... 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_escape_no_effect ... 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_is_at_bottom_offset_equals_max ... 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_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] [stdout] 
[INFO] [stdout] running 41 tests
[INFO] [stdout] test card_list_default_is_empty ... ok
[INFO] [stdout] test card_list_get_mut_finds_first_match_on_duplicate_id ... ok
[INFO] [stdout] test card_list_get_mut_returns_none_when_empty ... ok
[INFO] [stdout] test card_list_get_mut_returns_none_for_missing_id ... ok
[INFO] [stdout] test card_list_get_mut_update_various_statuses ... ok
[INFO] [stdout] test card_list_many_cards ... ok
[INFO] [stdout] test card_list_multiple_cards_ordered ... 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_many_lines_exceeds_max_expanded ... ok
[INFO] [stdout] test completed_multiline_output_line_count ... ok
[INFO] [stdout] test completed_single_line_output ... ok
[INFO] [stdout] test empty_tool_name ... ok
[INFO] [stdout] test completed_very_long_output ... ok
[INFO] [stdout] test empty_call_id ... ok
[INFO] [stdout] test new_accepts_string_types ... ok
[INFO] [stdout] test toggle_expand_flips_false_to_true ... ok
[INFO] [stdout] test completed_unicode_output ... ok
[INFO] [stdout] test card_list_get_mut_can_modify_card ... ok
[INFO] [stdout] test tool_status_clone_is_independent ... ok
[INFO] [stdout] test failed_empty_error ... ok
[INFO] [stdout] test new_creates_calling_card ... ok
[INFO] [stdout] test tool_status_completed_byte_size ... ok
[INFO] [stdout] test toggle_expand_preserves_status ... ok
[INFO] [stdout] test update_status_full_lifecycle ... ok
[INFO] [stdout] test tool_status_running_elapsed_sub_second ... ok
[INFO] [stdout] test update_status_to_completed ... ok
[INFO] [stdout] test toggle_expand_ten_times_even ... ok
[INFO] [stdout] test update_status_to_failed ... ok
[INFO] [stdout] test new_with_unicode_names ... ok
[INFO] [stdout] test update_status_zero_elapsed ... ok
[INFO] [stdout] test update_status_to_running ... ok
[INFO] [stdout] test toggle_expand_three_times ... ok
[INFO] [stdout] test toggle_expand_flips_true_to_false ... ok
[INFO] [stdout] test new_starting_is_not_expanded ... ok
[INFO] [stdout] test failed_unicode_error ... ok
[INFO] [stdout] test update_status_long_duration ... ok
[INFO] [stdout] test tool_card_clone_is_independent ... ok
[INFO] [stdout] test update_status_preserves_other_fields ... ok
[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] test result: ok. 41 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 31 tests
[INFO] [stdout] test app_can_store_user_messages ... 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_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_empty_string_model_accepts_empty ... 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 app_model_some_produces_correct_title ... 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 status_bar_contains_history_shortcut ... ok
[INFO] [stdout] test new_with_whitespace_model_name ... ok
[INFO] [stdout] test status_bar_contains_scroll_shortcut ... ok
[INFO] [stdout] test status_bar_contains_quit_shortcut ... ok
[INFO] [stdout] test status_bar_is_independent_of_app_state ... ok
[INFO] [stdout] test status_bar_leading_space ... ok
[INFO] [stdout] test status_bar_exact_text ... 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 status_bar_contains_send_shortcut ... ok
[INFO] [stdout] test title_bar_trailing_space_after_model ... ok
[INFO] [stdout] test title_bar_format_with_custom_model ... ok
[INFO] [stdout] test title_bar_format_with_default_unknown_model ... ok
[INFO] [stdout] test title_bar_leading_space_before_app_name ... ok
[INFO] [stdout] test title_bar_with_newline_in_model ... ok
[INFO] [stdout] test title_bar_with_null_byte_in_model ... ok
[INFO] [stdout] test title_bar_with_very_long_model_name ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 31 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[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" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039", kill_on_drop: false }`
[INFO] [stdout] 27842a63da48756c5326c201ebf7a0244b93fc37d0c3a04d477dfd3851bb7039
