[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] checking xartifact/x-artisan against 22950ab9e29e11620a10905f027f141ea126966e for pr-160581
[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 22950ab9e29e11620a10905f027f141ea126966e
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+22950ab9e29e11620a10905f027f141ea126966e" "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" "+22950ab9e29e11620a10905f027f141ea126966e" "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 tui-textarea v0.7.0
[INFO] [stderr]   Downloaded reqwest-eventsource v0.6.0
[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 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:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 4ca9af1966b14037ac593cb0c58eec299354ca83d9482dd69cf1f222e1dc76fb
[INFO] running `Command { std: "docker" "start" "4ca9af1966b14037ac593cb0c58eec299354ca83d9482dd69cf1f222e1dc76fb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "4ca9af1966b14037ac593cb0c58eec299354ca83d9482dd69cf1f222e1dc76fb", 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" "4ca9af1966b14037ac593cb0c58eec299354ca83d9482dd69cf1f222e1dc76fb" "/opt/rustwide/cargo-home/bin/cargo" "+22950ab9e29e11620a10905f027f141ea126966e" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "4ca9af1966b14037ac593cb0c58eec299354ca83d9482dd69cf1f222e1dc76fb", 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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "4ca9af1966b14037ac593cb0c58eec299354ca83d9482dd69cf1f222e1dc76fb" "/opt/rustwide/cargo-home/bin/cargo" "+22950ab9e29e11620a10905f027f141ea126966e" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.185
[INFO] [stderr]    Compiling cc v1.2.60
[INFO] [stderr]     Checking hashbrown v0.17.0
[INFO] [stderr]     Checking futures-io v0.3.32
[INFO] [stderr]     Checking tracing-core v0.1.36
[INFO] [stderr]     Checking rustls-pki-types v1.14.0
[INFO] [stderr]    Compiling openssl v0.10.77
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling rustls v0.23.38
[INFO] [stderr]    Compiling unicase v2.9.0
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking iri-string v0.7.12
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]     Checking futures-util v0.3.32
[INFO] [stderr]     Checking itertools v0.13.0
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking rustix v0.38.44
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]     Checking nom v7.1.3
[INFO] [stderr]     Checking rustls-native-certs v0.8.3
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking anstyle-parse v1.0.0
[INFO] [stderr]     Checking indexmap v2.14.0
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]     Checking castaway v0.2.4
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]     Checking is_terminal_polyfill v1.70.2
[INFO] [stderr]     Checking colorchoice v1.0.5
[INFO] [stderr]     Checking anstyle v1.0.14
[INFO] [stderr]     Checking unicode-segmentation v1.13.2
[INFO] [stderr]     Checking anstyle-query v1.1.5
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]     Checking compact_str v0.8.1
[INFO] [stderr]     Checking anstream v1.0.0
[INFO] [stderr]     Checking lru v0.12.5
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking instant v0.1.13
[INFO] [stderr]     Checking clap_lex v1.1.0
[INFO] [stderr]     Checking winnow v0.7.15
[INFO] [stderr]     Checking toml_write v0.1.2
[INFO] [stderr]     Checking futures-timer v3.0.3
[INFO] [stderr]     Checking option-ext v0.2.0
[INFO] [stderr]     Checking unicode-width v0.2.0
[INFO] [stderr]     Checking clap_builder v4.6.0
[INFO] [stderr]     Checking derive_builder v0.20.2
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]     Checking secrecy v0.10.3
[INFO] [stderr]    Compiling openssl-sys v0.9.113
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking env_home v0.1.0
[INFO] [stderr]     Checking regex v1.12.3
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking mio v1.2.0
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking socket2 v0.6.3
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking signal-hook v0.3.18
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking tokio v1.52.0
[INFO] [stderr]     Checking eventsource-stream v0.2.3
[INFO] [stderr]     Checking signal-hook-mio v0.2.5
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking dirs-sys v0.5.0
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking getrandom v0.4.2
[INFO] [stderr]     Checking dirs v6.0.0
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking chrono v0.4.44
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]     Checking uuid v1.23.1
[INFO] [stderr]     Checking crossterm v0.28.1
[INFO] [stderr]     Checking anyhow v1.0.102
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking unicode-truncate v1.1.0
[INFO] [stderr]     Checking glob v0.3.3
[INFO] [stderr]     Checking futures-executor v0.3.32
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]     Checking futures v0.3.32
[INFO] [stderr]     Checking which v7.0.3
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking clap v4.6.1
[INFO] [stderr]     Checking ratatui v0.29.0
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking tui-textarea v0.7.0
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking backoff v0.4.0
[INFO] [stderr]     Checking tokio-stream v0.1.18
[INFO] [stderr]     Checking tower-http v0.6.8
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking h2 v0.4.13
[INFO] [stderr]     Checking rustls-webpki v0.103.12
[INFO] [stderr]     Checking hyper v1.9.0
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking tokio-rustls v0.26.4
[INFO] [stderr]     Checking hyper-rustls v0.27.9
[INFO] [stderr]     Checking hyper-tls v0.6.0
[INFO] [stderr]     Checking reqwest v0.12.28
[INFO] [stderr]     Checking reqwest-eventsource v0.6.0
[INFO] [stderr]     Checking async-openai v0.27.2
[INFO] [stderr]     Checking 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: variable does not need to be mutable
[INFO] [stdout]    --> src/llm/openai.rs:104:13
[INFO] [stdout]     |
[INFO] [stdout] 104 |         let mut request = CreateChatCompletionRequest {
[INFO] [stdout]     |             ----^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `timeout_secs`
[INFO] [stdout]   --> src/tools/bash.rs:43:13
[INFO] [stdout]    |
[INFO] [stdout] 43 |         let timeout_secs = input["timeout"].as_u64().unwrap_or(120);
[INFO] [stdout]    |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_secs`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `timeout_secs`
[INFO] [stdout]   --> src/tools/bash.rs:43:13
[INFO] [stdout]    |
[INFO] [stdout] 43 |         let timeout_secs = input["timeout"].as_u64().unwrap_or(120);
[INFO] [stdout]    |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout_secs`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 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: 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: 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: 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: 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 34.77s
[INFO] running `Command { std: "docker" "inspect" "4ca9af1966b14037ac593cb0c58eec299354ca83d9482dd69cf1f222e1dc76fb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4ca9af1966b14037ac593cb0c58eec299354ca83d9482dd69cf1f222e1dc76fb", kill_on_drop: false }`
[INFO] [stdout] 4ca9af1966b14037ac593cb0c58eec299354ca83d9482dd69cf1f222e1dc76fb
