[INFO] cloning repository https://github.com/qq296565302/AgentHub-----Rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/qq296565302/AgentHub-----Rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fqq296565302%2FAgentHub-----Rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fqq296565302%2FAgentHub-----Rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 8102fbb58af36a05c3c02226737d90260685b6a3
[INFO] testing qq296565302/AgentHub-----Rust 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%2Fqq296565302%2FAgentHub-----Rust" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/qq296565302/AgentHub-----Rust
[INFO] finished tweaking git repo https://github.com/qq296565302/AgentHub-----Rust
[INFO] tweaked toml for git repo https://github.com/qq296565302/AgentHub-----Rust written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/qq296565302/AgentHub-----Rust 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/qq296565302/AgentHub-----Rust 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]  Downloading crates ...
[INFO] [stderr]   Downloaded deadpool v0.12.3
[INFO] [stderr]   Downloaded wiremock v0.6.5
[INFO] [stderr]   Downloaded tracing-serde v0.2.0
[INFO] [stderr]   Downloaded deadpool-runtime v0.1.4
[INFO] [stderr]   Downloaded tokio-test v0.4.5
[INFO] [stderr]   Downloaded secrecy v0.8.0
[INFO] [stderr]   Downloaded fd-lock v4.0.4
[INFO] [stderr]   Downloaded cc v1.0.106
[INFO] [stderr]   Downloaded predicates-core v1.0.10
[INFO] [stderr]   Downloaded float-cmp v0.10.0
[INFO] [stderr]   Downloaded hyper-rustls v0.24.2
[INFO] [stderr]   Downloaded normalize-line-endings v0.3.0
[INFO] [stderr]   Downloaded difflib v0.4.0
[INFO] [stderr]   Downloaded tokio-rustls v0.24.1
[INFO] [stderr]   Downloaded sketches-ddsketch v0.2.2
[INFO] [stderr]   Downloaded predicates v3.1.4
[INFO] [stderr]   Downloaded fancy-regex v0.12.0
[INFO] [stderr]   Downloaded cmake v0.1.53
[INFO] [stderr]   Downloaded quanta v0.12.6
[INFO] [stderr]   Downloaded metrics v0.23.1
[INFO] [stderr]   Downloaded tower-http v0.5.2
[INFO] [stderr]   Downloaded rustyline v14.0.0
[INFO] [stderr]   Downloaded metrics-exporter-prometheus v0.15.3
[INFO] [stderr]   Downloaded tree-sitter-javascript v0.21.4
[INFO] [stderr]   Downloaded metrics-util v0.17.0
[INFO] [stderr]   Downloaded backoff v0.4.0
[INFO] [stderr]   Downloaded serde_path_to_error v0.1.20
[INFO] [stderr]   Downloaded predicates-tree v1.0.13
[INFO] [stderr]   Downloaded termtree v0.5.1
[INFO] [stderr]   Downloaded rustls-webpki v0.103.4
[INFO] [stderr]   Downloaded axum-core v0.4.5
[INFO] [stderr]   Downloaded assert_cmd v2.2.1
[INFO] [stderr]   Downloaded axum-macros v0.4.2
[INFO] [stderr]   Downloaded raw-cpuid v11.6.0
[INFO] [stderr]   Downloaded tree-sitter-python v0.21.0
[INFO] [stderr]   Downloaded tree-sitter v0.21.0
[INFO] [stderr]   Downloaded aws-lc-rs v1.13.3
[INFO] [stderr]   Downloaded webpki-roots v0.25.4
[INFO] [stderr]   Downloaded bindgen v0.69.5
[INFO] [stderr]   Downloaded axum v0.7.9
[INFO] [stderr]   Downloaded nix v0.28.0
[INFO] [stderr]   Downloaded tree-sitter-rust v0.21.2
[INFO] [stderr]   Downloaded rustls v0.23.31
[INFO] [stderr]   Downloaded libc v0.2.185
[INFO] [stderr]   Downloaded tokio v1.52.1
[INFO] [stderr]   Downloaded tree-sitter-typescript v0.21.2
[INFO] [stderr]   Downloaded ring v0.17.9
[INFO] [stderr]   Downloaded tiktoken-rs v0.5.9
[INFO] [stderr]   Downloaded aws-lc-sys v0.30.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177
[INFO] running `Command { std: "docker" "start" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177", 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" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177" "/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" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177", 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" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177" "/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.0.106
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling hashbrown v0.17.0
[INFO] [stderr]    Compiling http v0.2.12
[INFO] [stderr]    Compiling ucd-trie v0.1.7
[INFO] [stderr]    Compiling rustls v0.21.12
[INFO] [stderr]    Compiling utf8parse v0.2.2
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling pest v2.8.6
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling cfg_aliases v0.1.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling nix v0.28.0
[INFO] [stderr]    Compiling tree-sitter v0.21.0
[INFO] [stderr]    Compiling ring v0.17.9
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling http-body v0.4.6
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling mime v0.3.17
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling bit-vec v0.6.3
[INFO] [stderr]    Compiling lazy_static v1.5.0
[INFO] [stderr]    Compiling zerofrom v0.1.7
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling base64 v0.21.7
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling pest_meta v2.8.6
[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 getrandom v0.2.17
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling socket2 v0.5.10
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling bit-set v0.5.3
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling tree-sitter-javascript v0.21.4
[INFO] [stderr]    Compiling tree-sitter-python v0.21.0
[INFO] [stderr]    Compiling tree-sitter-rust v0.21.2
[INFO] [stderr]    Compiling tree-sitter-typescript v0.21.2
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling nibble_vec v0.1.0
[INFO] [stderr]    Compiling tokio v1.52.1
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling pest_generator v2.8.6
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling pin-project-internal v1.1.11
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling endian-type v0.1.2
[INFO] [stderr]    Compiling tinyvec_macros v0.1.1
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling radix_trie v0.2.1
[INFO] [stderr]    Compiling tinyvec v1.11.0
[INFO] [stderr]    Compiling dirs-sys v0.4.1
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling pest_derive v2.8.6
[INFO] [stderr]    Compiling pin-project v1.1.11
[INFO] [stderr]    Compiling fd-lock v4.0.4
[INFO] [stderr]    Compiling tracing-serde v0.2.0
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling axum-core v0.4.5
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling rustls-pemfile v1.0.4
[INFO] [stderr]    Compiling sct v0.7.1
[INFO] [stderr]    Compiling rustls-webpki v0.101.7
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling axum-macros v0.4.2
[INFO] [stderr]    Compiling fancy-regex v0.12.0
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling instant v0.1.13
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling sync_wrapper v0.1.2
[INFO] [stderr]    Compiling home v0.5.12
[INFO] [stderr]    Compiling webpki-roots v0.25.4
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling unicode-segmentation v1.13.2
[INFO] [stderr]    Compiling matchit v0.7.3
[INFO] [stderr]    Compiling rustc-hash v1.1.0
[INFO] [stderr]    Compiling agenthub v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling unicode-width v0.1.14
[INFO] [stderr]    Compiling tiktoken-rs v0.5.9
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling secrecy v0.8.0
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling rustyline v14.0.0
[INFO] [stderr]    Compiling backoff v0.4.0
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling metrics v0.23.1
[INFO] [stderr]    Compiling uuid v1.23.1
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling tower v0.4.13
[INFO] [stderr]    Compiling lru v0.12.5
[INFO] [stderr]    Compiling handlebars v5.1.2
[INFO] [stderr]    Compiling unicode-normalization v0.1.25
[INFO] [stderr]    Compiling dirs v5.0.1
[INFO] [stderr]    Compiling tower-http v0.5.2
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling tokio-rustls v0.24.1
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling h2 v0.3.27
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling axum v0.7.9
[INFO] [stderr]    Compiling hyper v0.14.32
[INFO] [stderr]    Compiling hyper-rustls v0.24.2
[INFO] [stderr]    Compiling reqwest v0.11.27
[INFO] [stdout] warning: unused import: `File`
[INFO] [stdout]  --> src/audit.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fs::{File, OpenOptions};
[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: `Path`
[INFO] [stdout]  --> src/audit.rs:6:17
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `LlmError`
[INFO] [stdout]  --> src/llm/mod.rs:6:35
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{AgentHubError, LlmError, Result};
[INFO] [stdout]   |                                   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gauge`
[INFO] [stdout]  --> src/metrics.rs:1:24
[INFO] [stdout]   |
[INFO] [stdout] 1 | use metrics::{counter, gauge, histogram};
[INFO] [stdout]   |                        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `QueryCursor`
[INFO] [stdout]  --> src/parser/language.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tree_sitter::{Language, Query, QueryCursor};
[INFO] [stdout]   |                                    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ast_utils::AstUtils`
[INFO] [stdout]  --> src/parser/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use ast_utils::AstUtils;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `language::LanguageRegistry`
[INFO] [stdout]  --> src/parser/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use language::LanguageRegistry;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parser::CodeParser`
[INFO] [stdout]  --> src/parser/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use parser::CodeParser;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `circuit_breaker::CircuitBreaker`
[INFO] [stdout]  --> src/resilience/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use circuit_breaker::CircuitBreaker;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `retry::RetryPolicy`
[INFO] [stdout]  --> src/resilience/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use retry::RetryPolicy;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Response`
[INFO] [stdout]  --> src/server/handlers.rs:6:36
[INFO] [stdout]   |
[INFO] [stdout] 6 | use axum::response::{IntoResponse, Response};
[INFO] [stdout]   |                                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/parser/parser.rs:59:23
[INFO] [stdout]    |
[INFO] [stdout] 59 |             .map_err(|e| AgentHubError::FileReadError { path: path.to_string() })?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_user_id`, `with_skill_name`, `with_metadata`, and `with_duration` are never used
[INFO] [stdout]   --> src/audit.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl AuditEntry {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 43 |     pub fn new(event_type: AuditEventType, level: AuditLevel, message: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn with_user_id(mut self, user_id: String) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn with_skill_name(mut self, skill_name: String) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn with_metadata(mut self, key: &str, value: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn with_duration(mut self, ms: u64) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `buffer_size` and `retention_days` are never read
[INFO] [stdout]   --> src/audit.rs:81:5
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub struct AuditLogger {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 81 |     buffer_size: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 82 |     retention_days: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/audit.rs:98:12
[INFO] [stdout]     |
[INFO] [stdout]  85 | impl AuditLogger {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn with_buffer_size(mut self, size: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn with_retention_days(mut self, days: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn from_config(enabled: bool, log_dir: &str, retention_days: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn log(&self, entry: AuditEntry) -> std::io::Result<()> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn flush(&self) -> std::io::Result<()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     fn flush_locked(&self, buffer: &mut Vec<AuditEntry>) -> std::io::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn cleanup_expired(&self) -> std::io::Result<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `provider_names` is never used
[INFO] [stdout]   --> src/config/mod.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl LLMConfig {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn provider_names(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `load_or_default` is never used
[INFO] [stdout]    --> src/config/mod.rs:320:12
[INFO] [stdout]     |
[INFO] [stdout] 263 | impl Settings {
[INFO] [stdout]     | ------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn load_or_default() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/error.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum AgentHubError {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 12 |     SkillExecutionFailed { reason: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     InputBlocked { violation_type: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     LlmUnavailable,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     LlmTimeout { timeout_secs: u64 },
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     FileNotFound { path: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     FileReadError { path: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     MissingConfig { field: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     UnsupportedLanguage(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     InvalidRequest(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     UnknownCommand(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AgentHubError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InvalidManifest`, `InitializationFailed`, and `InvalidParameters` are never constructed
[INFO] [stdout]   --> src/error.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub enum SkillError {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] 65 |     #[error("Invalid skill manifest: {0}")]
[INFO] [stdout] 66 |     InvalidManifest(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     InitializationFailed(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     InvalidParameters(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SkillError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `PromptInjectionDetected`, `PiiDetected`, `InputTooLarge`, and `RateLimited` are never constructed
[INFO] [stdout]   --> src/error.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub enum SecurityError {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] 77 |     #[error("Prompt injection detected")]
[INFO] [stdout] 78 |     PromptInjectionDetected,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     PiiDetected { pii_type: String },
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     InputTooLarge { size: usize, max_size: usize },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     RateLimited,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SecurityError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NoResponse`, `ModelNotFound`, `ContextLengthExceeded`, `CircuitOpen`, and `NoMoreResponses` are never constructed
[INFO] [stdout]    --> src/error.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout]  97 | pub enum LlmError {
[INFO] [stdout]     |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 111 |     NoResponse,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     ModelNotFound(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     ContextLengthExceeded,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     CircuitOpen,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     NoMoreResponses,
[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] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_config`, `with_layer`, and `validate_file_path` are never used
[INFO] [stdout]    --> src/guardrails/mod.rs:46:12
[INFO] [stdout]     |
[INFO] [stdout]  32 | impl SecurityPipeline {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  46 |     pub fn from_config(config: &SecurityConfig) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn with_layer(mut self, layer: Box<dyn Guardrail>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn validate_file_path(&self, path: &str, workspace: &str) -> Result<String, SecurityError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `blocked_patterns` is never read
[INFO] [stdout]  --> src/guardrails/input_validator.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct InputValidator {
[INFO] [stdout]   |            -------------- field in this struct
[INFO] [stdout] 8 |     max_input_size: usize,
[INFO] [stdout] 9 |     blocked_patterns: Vec<String>,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `InputValidator` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `validate` and `validate_file_path` are never used
[INFO] [stdout]   --> src/guardrails/input_validator.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl InputValidator {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub fn validate<'a>(&self, input: &'a str) -> Result<&'a str, SecurityError> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn validate_file_path(&self, path: &str, workspace: &str) -> Result<String, SecurityError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/guardrails/output_sanitizer.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | impl OutputSanitizer {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 51 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `permissive` is never used
[INFO] [stdout]   --> src/guardrails/pii_detector.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | impl PIIDetectorGuard {
[INFO] [stdout]    | --------------------- associated function in this implementation
[INFO] [stdout] 41 |     pub fn permissive() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Strict` and `Permissive` are never constructed
[INFO] [stdout]   --> src/guardrails/prompt_injection.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub enum InjectionThreshold {
[INFO] [stdout]    |          ------------------ variants in this enum
[INFO] [stdout] 49 |     Strict,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 50 |     Normal,
[INFO] [stdout] 51 |     Permissive,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InjectionThreshold` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `with_threshold` is never used
[INFO] [stdout]   --> src/guardrails/prompt_injection.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | impl PromptInjectionGuard {
[INFO] [stdout]    | ------------------------- associated function in this implementation
[INFO] [stdout] 63 |     pub fn with_threshold(threshold: InjectionThreshold) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `burst_size` is never read
[INFO] [stdout]   --> src/guardrails/rate_limiter.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct RateLimiter {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 14 |     max_requests_per_minute: u32,
[INFO] [stdout] 15 |     burst_size: u32,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RateLimiter` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `check_burst`, `remaining`, and `cleanup` are never used
[INFO] [stdout]    --> src/guardrails/rate_limiter.rs:59:12
[INFO] [stdout]     |
[INFO] [stdout]  20 | impl RateLimiter {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  59 |     pub fn check_burst(&self, key: &str) -> Result<(), RateLimitError> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub fn remaining(&self, key: &str) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn cleanup(&self) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `BurstExceeded` is never constructed
[INFO] [stdout]    --> src/guardrails/rate_limiter.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub enum RateLimitError {
[INFO] [stdout]     |          -------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 122 |     BurstExceeded { burst_size: u32 },
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RateLimitError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `with_max_tokens` and `with_stream` are never used
[INFO] [stdout]   --> src/llm/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl LlmRequest {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn with_max_tokens(mut self, tokens: usize) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn with_stream(mut self, stream: bool) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/llm/mod.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 67 | impl LlmResponse {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 68 |     pub fn new(content: String, model: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamChunk` is never constructed
[INFO] [stdout]   --> src/llm/mod.rs:81:12
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub struct StreamChunk {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `stream` is never used
[INFO] [stdout]   --> src/llm/mod.rs:90:14
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub trait LlmClient: Send + Sync {
[INFO] [stdout]    |           --------- method in this trait
[INFO] [stdout] 89 |     async fn complete(&self, request: LlmRequest) -> Result<LlmResponse>;
[INFO] [stdout] 90 |     async fn stream(&self, request: LlmRequest) -> Result<futures::stream::BoxStream<'static, Result<StreamChunk>>>;
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `base_url`, `model`, `timeout`, `temperature`, and `max_tokens` are never read
[INFO] [stdout]    --> src/llm/mod.rs:96:5
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct LlmClientBuilder {
[INFO] [stdout]     |            ---------------- fields in this struct
[INFO] [stdout]  96 |     base_url: String,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout]  97 |     model: String,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]  98 |     timeout: Duration,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]  99 |     temperature: f32,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 100 |     max_tokens: usize,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `base_url`, `model`, `timeout`, `temperature`, `max_tokens`, and `build` are never used
[INFO] [stdout]    --> src/llm/mod.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | impl LlmClientBuilder {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn base_url(mut self, url: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn model(mut self, model: &str) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn timeout(mut self, timeout: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn temperature(mut self, temp: f32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub fn max_tokens(mut self, tokens: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn build(self) -> Result<Box<dyn LlmClient>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `system` is never used
[INFO] [stdout]    --> src/llm/mod.rs:239:12
[INFO] [stdout]     |
[INFO] [stdout] 230 | impl Message {
[INFO] [stdout]     | ------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn system(content: String) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_default_response`, `get_request_log`, and `add_response` are never used
[INFO] [stdout]   --> src/llm/mock.rs:44:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl MockLlmClient {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 44 |     pub fn new(responses: Vec<MockResponse>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn with_default_response(content: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub async fn get_request_log(&self) -> Vec<LlmRequest> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub async fn add_response(&self, response: MockResponse) {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `role` is never read
[INFO] [stdout]   --> src/llm/ollama.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | struct OllamaMessage {
[INFO] [stdout]    |        ------------- field in this struct
[INFO] [stdout] 22 |     role: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OllamaMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OllamaModelsResponse` is never constructed
[INFO] [stdout]   --> src/llm/ollama.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | struct OllamaModelsResponse {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OllamaModel` is never constructed
[INFO] [stdout]   --> src/llm/ollama.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | struct OllamaModel {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `list_models` and `is_available` are never used
[INFO] [stdout]   --> src/llm/ollama.rs:68:18
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl OllamaClient {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub async fn list_models(&self) -> Result<Vec<String>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub async fn is_available(&self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `finish_reason` is never read
[INFO] [stdout]   --> src/llm/openai.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | struct OpenAiChoice {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     finish_reason: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OpenAiChoice` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `role` is never read
[INFO] [stdout]   --> src/llm/openai.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | struct OpenAiMessage {
[INFO] [stdout]    |        ------------- field in this struct
[INFO] [stdout] 26 |     role: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OpenAiMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `total_tokens` is never read
[INFO] [stdout]   --> src/llm/openai.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | struct OpenAiUsage {
[INFO] [stdout]    |        ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 34 |     total_tokens: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OpenAiUsage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OpenAiStreamChunk` is never constructed
[INFO] [stdout]   --> src/llm/openai.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | struct OpenAiStreamChunk {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OpenAiStreamChoice` is never constructed
[INFO] [stdout]   --> src/llm/openai.rs:44:8
[INFO] [stdout]    |
[INFO] [stdout] 44 | struct OpenAiStreamChoice {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OpenAiStreamDelta` is never constructed
[INFO] [stdout]   --> src/llm/openai.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | struct OpenAiStreamDelta {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MetricsCollector` is never constructed
[INFO] [stdout]  --> src/metrics.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct MetricsCollector {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/metrics.rs:21:12
[INFO] [stdout]     |
[INFO] [stdout]  20 | impl MetricsCollector {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  21 |     pub fn new() -> Arc<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  37 |     pub fn record_llm_request(&self, duration_ms: u64, success: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn record_skill_execution(&self, skill_name: &str, duration_ms: u64, success: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  64 |     pub fn record_security_check(&self, blocked: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub fn record_parse_operation(&self, success: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn avg_llm_duration_ms(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn llm_error_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn security_block_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn snapshot(&self) -> MetricsSnapshot {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MetricsSnapshot` is never constructed
[INFO] [stdout]    --> src/metrics.rs:143:12
[INFO] [stdout]     |
[INFO] [stdout] 143 | pub struct MetricsSnapshot {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Timer` is never constructed
[INFO] [stdout]    --> src/metrics.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub struct Timer {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start`, `elapsed_ms`, and `stop` are never used
[INFO] [stdout]    --> src/metrics.rs:162:12
[INFO] [stdout]     |
[INFO] [stdout] 161 | impl Timer {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] 162 |     pub fn start() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn elapsed_ms(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn stop(self) -> u64 {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AstUtils` is never constructed
[INFO] [stdout]  --> src/parser/ast_utils.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct AstUtils;
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/parser/ast_utils.rs:7:12
[INFO] [stdout]     |
[INFO] [stdout]   6 | impl AstUtils {
[INFO] [stdout]     | ------------- associated functions in this implementation
[INFO] [stdout]   7 |     pub fn get_node_text<'a>(node: &Node, source: &'a str) -> &'a str {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  11 |     pub fn find_nodes_by_kind<'a>(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  26 |     pub fn count_nodes_by_kind(node: &Node, kind: &str) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  32 |     pub fn get_depth(node: &Node) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  42 |     pub fn get_comment_ratio(source: &str, lang: SupportedLanguage) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn extract_imports(source: &str, lang: SupportedLanguage) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn calculate_complexity(node: &Node) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     fn walk_complexity<'a>(node: &Node<'a>, keywords: &[&str], count: &mut usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `extension` is never used
[INFO] [stdout]   --> src/parser/language.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl SupportedLanguage {
[INFO] [stdout]    | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `is_supported` is never used
[INFO] [stdout]    --> src/parser/language.rs:129:12
[INFO] [stdout]     |
[INFO] [stdout]  98 | impl LanguageRegistry {
[INFO] [stdout]     | --------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn is_supported(ext: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `parse_file`, `get_function_at_line`, and `get_function_by_name` are never used
[INFO] [stdout]    --> src/parser/parser.rs:52:12
[INFO] [stdout]     |
[INFO] [stdout]  29 | impl CodeParser {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn parse_file(&mut self, path: &str) -> Result<ParseResult> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn get_function_at_line(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn get_function_by_name(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CircuitState` is never used
[INFO] [stdout]  --> src/resilience/circuit_breaker.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum CircuitState {
[INFO] [stdout]   |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CircuitBreakerConfig` is never constructed
[INFO] [stdout]   --> src/resilience/circuit_breaker.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct CircuitBreakerConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CircuitBreakerInner` is never constructed
[INFO] [stdout]   --> src/resilience/circuit_breaker.rs:31:8
[INFO] [stdout]    |
[INFO] [stdout] 31 | struct CircuitBreakerInner {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `CLOSED`, `OPEN`, `HALF_OPEN`, and `get_state` are never used
[INFO] [stdout]   --> src/resilience/circuit_breaker.rs:41:11
[INFO] [stdout]    |
[INFO] [stdout] 40 | impl CircuitBreakerInner {
[INFO] [stdout]    | ------------------------ associated items in this implementation
[INFO] [stdout] 41 |     const CLOSED: u8 = 0;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 42 |     const OPEN: u8 = 1;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 43 |     const HALF_OPEN: u8 = 2;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 44 |
[INFO] [stdout] 45 |     fn get_state(&self) -> CircuitState {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CircuitBreaker` is never constructed
[INFO] [stdout]   --> src/resilience/circuit_breaker.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct CircuitBreaker {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/resilience/circuit_breaker.rs:76:12
[INFO] [stdout]     |
[INFO] [stdout]  75 | impl CircuitBreaker {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout]  76 |     pub fn new(name: &str, config: CircuitBreakerConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn state(&self) -> CircuitState {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn is_call_allowed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn record_success(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn record_failure(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn failure_count(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub async fn execute<F, Fut, T>(&self, operation: F) -> crate::error::Result<T>
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RetryPolicy` is never constructed
[INFO] [stdout]  --> src/resilience/retry.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct RetryPolicy {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_initial_interval`, `with_max_interval`, `to_backoff`, `is_retryable`, and `execute` are never used
[INFO] [stdout]   --> src/resilience/retry.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl RetryPolicy {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 26 |     pub fn new(max_retries: u32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn with_initial_interval(mut self, duration: Duration) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn with_max_interval(mut self, duration: Duration) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn to_backoff(&self) -> ExponentialBackoff {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn is_retryable(error: &AgentHubError) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub async fn execute<F, Fut, T>(&self, operation: F) -> crate::error::Result<T>
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REPL_PROMPT` is never used
[INFO] [stdout]   --> src/repl/mod.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const REPL_PROMPT: &str = "agenthub> ";
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MULTILINE_PROMPT` is never used
[INFO] [stdout]   --> src/repl/mod.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const MULTILINE_PROMPT: &str = "... ";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream` is never read
[INFO] [stdout]   --> src/server/handlers.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct ChatRequest {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub stream: bool,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_rate_limit` is never used
[INFO] [stdout]   --> src/server/state.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl AppState {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn with_rate_limit(mut self, config: &RateLimitConfig) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `description` is never used
[INFO] [stdout]   --> src/skills/mod.rs:43:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub trait Skill: Send + Sync {
[INFO] [stdout]    |           ----- method in this trait
[INFO] [stdout] 42 |     fn name(&self) -> &str;
[INFO] [stdout] 43 |     fn description(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `parser` is never read
[INFO] [stdout]   --> src/skills/code_explainer.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct CodeExplainerSkill {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 41 |     llm: Box<dyn LlmClient>,
[INFO] [stdout] 42 |     parser: CodeParser,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `with_mock_llm`, `explain_function`, and `explain_at_line` are never used
[INFO] [stdout]    --> src/skills/code_explainer.rs:57:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl CodeExplainerSkill {
[INFO] [stdout]     | ----------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn with_mock_llm() -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub async fn explain_function(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub async fn explain_at_line(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get` and `list_names` are never used
[INFO] [stdout]   --> src/skills/registry.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl SkillRegistry {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn get(&self, name: &str) -> Option<&dyn Skill> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn list_names(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `parser` is never read
[INFO] [stdout]   --> src/skills/test_generator.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct TestGeneratorSkill {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 43 |     llm: Box<dyn LlmClient>,
[INFO] [stdout] 44 |     parser: CodeParser,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `with_mock_llm` and `generate_tests_for_function` are never used
[INFO] [stdout]   --> src/skills/test_generator.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl TestGeneratorSkill {
[INFO] [stdout]    | ----------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn with_mock_llm() -> Result<Self> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub async fn generate_tests_for_function(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 47s
[INFO] running `Command { std: "docker" "inspect" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177", 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" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177" "/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 zerocopy v0.8.48
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling zerocopy-derive v0.8.48
[INFO] [stderr]    Compiling tokio v1.52.1
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling predicates-core v1.0.10
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]    Compiling difflib v0.4.0
[INFO] [stderr]    Compiling assert_cmd v2.2.1
[INFO] [stderr]    Compiling normalize-line-endings v0.3.0
[INFO] [stderr]    Compiling termtree v0.5.1
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling deadpool-runtime v0.1.4
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling predicates-tree v1.0.13
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling tracing-serde v0.2.0
[INFO] [stderr]    Compiling assert-json-diff v2.0.2
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling handlebars v5.1.2
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling float-cmp v0.10.0
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling predicates v3.1.4
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling rayon v1.12.0
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tokio-rustls v0.24.1
[INFO] [stderr]    Compiling tokio-stream v0.1.18
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling deadpool v0.12.3
[INFO] [stderr]    Compiling tokio-test v0.4.5
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling h2 v0.4.13
[INFO] [stderr]    Compiling h2 v0.3.27
[INFO] [stderr]    Compiling metrics v0.23.1
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stderr]    Compiling backoff v0.4.0
[INFO] [stderr]    Compiling hyper v0.14.32
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.24.2
[INFO] [stderr]    Compiling wiremock v0.6.5
[INFO] [stderr]    Compiling axum v0.7.9
[INFO] [stderr]    Compiling reqwest v0.11.27
[INFO] [stderr]    Compiling agenthub v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `File`
[INFO] [stdout]  --> src/audit.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fs::{File, OpenOptions};
[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: `Path`
[INFO] [stdout]  --> src/audit.rs:6:17
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `LlmError`
[INFO] [stdout]  --> src/llm/mod.rs:6:35
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{AgentHubError, LlmError, Result};
[INFO] [stdout]   |                                   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gauge`
[INFO] [stdout]  --> src/metrics.rs:1:24
[INFO] [stdout]   |
[INFO] [stdout] 1 | use metrics::{counter, gauge, histogram};
[INFO] [stdout]   |                        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `QueryCursor`
[INFO] [stdout]  --> src/parser/language.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tree_sitter::{Language, Query, QueryCursor};
[INFO] [stdout]   |                                    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ast_utils::AstUtils`
[INFO] [stdout]  --> src/parser/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use ast_utils::AstUtils;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `language::LanguageRegistry`
[INFO] [stdout]  --> src/parser/mod.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use language::LanguageRegistry;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parser::CodeParser`
[INFO] [stdout]  --> src/parser/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use parser::CodeParser;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `circuit_breaker::CircuitBreaker`
[INFO] [stdout]  --> src/resilience/mod.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use circuit_breaker::CircuitBreaker;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `retry::RetryPolicy`
[INFO] [stdout]  --> src/resilience/mod.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use retry::RetryPolicy;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Response`
[INFO] [stdout]  --> src/server/handlers.rs:6:36
[INFO] [stdout]   |
[INFO] [stdout] 6 | use axum::response::{IntoResponse, Response};
[INFO] [stdout]   |                                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dir`
[INFO] [stdout]    --> src/guardrails/file_guard.rs:133:14
[INFO] [stdout]     |
[INFO] [stdout] 133 |         let (dir, workspace) = setup_workspace();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dir`
[INFO] [stdout]    --> src/guardrails/file_guard.rs:160:14
[INFO] [stdout]     |
[INFO] [stdout] 160 |         let (dir, workspace) = setup_workspace();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dir`
[INFO] [stdout]    --> src/guardrails/file_guard.rs:174:14
[INFO] [stdout]     |
[INFO] [stdout] 174 |         let (dir, workspace) = setup_workspace();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dir`
[INFO] [stdout]    --> src/guardrails/file_guard.rs:188:14
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let (dir, workspace) = setup_workspace();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dir`
[INFO] [stdout]    --> src/guardrails/file_guard.rs:202:14
[INFO] [stdout]     |
[INFO] [stdout] 202 |         let (dir, workspace) = setup_workspace();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dir`
[INFO] [stdout]    --> src/guardrails/file_guard.rs:217:14
[INFO] [stdout]     |
[INFO] [stdout] 217 |         let (dir, workspace) = setup_workspace();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/parser/parser.rs:59:23
[INFO] [stdout]    |
[INFO] [stdout] 59 |             .map_err(|e| AgentHubError::FileReadError { path: path.to_string() })?;
[INFO] [stdout]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `load_or_default` is never used
[INFO] [stdout]    --> src/config/mod.rs:320:12
[INFO] [stdout]     |
[INFO] [stdout] 263 | impl Settings {
[INFO] [stdout]     | ------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn load_or_default() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/error.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum AgentHubError {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 12 |     SkillExecutionFailed { reason: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     InputBlocked { violation_type: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     LlmUnavailable,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     LlmTimeout { timeout_secs: u64 },
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     FileNotFound { path: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     FileReadError { path: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     MissingConfig { field: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     UnsupportedLanguage(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     InvalidRequest(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     UnknownCommand(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AgentHubError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InvalidManifest`, `InitializationFailed`, and `InvalidParameters` are never constructed
[INFO] [stdout]   --> src/error.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub enum SkillError {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] 65 |     #[error("Invalid skill manifest: {0}")]
[INFO] [stdout] 66 |     InvalidManifest(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     InitializationFailed(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     InvalidParameters(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SkillError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `PromptInjectionDetected`, `PiiDetected`, and `RateLimited` are never constructed
[INFO] [stdout]   --> src/error.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub enum SecurityError {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] 77 |     #[error("Prompt injection detected")]
[INFO] [stdout] 78 |     PromptInjectionDetected,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     PiiDetected { pii_type: String },
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     RateLimited,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SecurityError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `NoResponse`, `ContextLengthExceeded`, and `NoMoreResponses` are never constructed
[INFO] [stdout]    --> src/error.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout]  97 | pub enum LlmError {
[INFO] [stdout]     |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 111 |     NoResponse,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     ContextLengthExceeded,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     NoMoreResponses,
[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] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `with_layer` and `validate_file_path` are never used
[INFO] [stdout]    --> src/guardrails/mod.rs:60:12
[INFO] [stdout]     |
[INFO] [stdout]  32 | impl SecurityPipeline {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn with_layer(mut self, layer: Box<dyn Guardrail>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn validate_file_path(&self, path: &str, workspace: &str) -> Result<String, SecurityError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `validate_file_path` is never used
[INFO] [stdout]   --> src/guardrails/input_validator.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl InputValidator {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn validate_file_path(&self, path: &str, workspace: &str) -> Result<String, SecurityError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_allow_all_blocks_link_local` is never used
[INFO] [stdout]    --> src/guardrails/network_guard.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 |     fn test_allow_all_blocks_link_local() {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/guardrails/output_sanitizer.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | impl OutputSanitizer {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 51 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Permissive` is never constructed
[INFO] [stdout]   --> src/guardrails/prompt_injection.rs:51:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub enum InjectionThreshold {
[INFO] [stdout]    |          ------------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 51 |     Permissive,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InjectionThreshold` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `base_url`, `model`, `timeout`, `temperature`, and `max_tokens` are never read
[INFO] [stdout]    --> src/llm/mod.rs:96:5
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct LlmClientBuilder {
[INFO] [stdout]     |            ---------------- fields in this struct
[INFO] [stdout]  96 |     base_url: String,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout]  97 |     model: String,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]  98 |     timeout: Duration,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]  99 |     temperature: f32,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 100 |     max_tokens: usize,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `base_url`, `model`, `timeout`, `temperature`, `max_tokens`, and `build` are never used
[INFO] [stdout]    --> src/llm/mod.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | impl LlmClientBuilder {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn base_url(mut self, url: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn model(mut self, model: &str) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn timeout(mut self, timeout: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn temperature(mut self, temp: f32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub fn max_tokens(mut self, tokens: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn build(self) -> Result<Box<dyn LlmClient>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `system` is never used
[INFO] [stdout]    --> src/llm/mod.rs:239:12
[INFO] [stdout]     |
[INFO] [stdout] 230 | impl Message {
[INFO] [stdout]     | ------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn system(content: String) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `add_response` is never used
[INFO] [stdout]   --> src/llm/mock.rs:68:18
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl MockLlmClient {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub async fn add_response(&self, response: MockResponse) {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `role` is never read
[INFO] [stdout]   --> src/llm/ollama.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | struct OllamaMessage {
[INFO] [stdout]    |        ------------- field in this struct
[INFO] [stdout] 22 |     role: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OllamaMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OllamaModelsResponse` is never constructed
[INFO] [stdout]   --> src/llm/ollama.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | struct OllamaModelsResponse {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OllamaModel` is never constructed
[INFO] [stdout]   --> src/llm/ollama.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | struct OllamaModel {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `list_models` and `is_available` are never used
[INFO] [stdout]   --> src/llm/ollama.rs:68:18
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl OllamaClient {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub async fn list_models(&self) -> Result<Vec<String>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub async fn is_available(&self) -> bool {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `finish_reason` is never read
[INFO] [stdout]   --> src/llm/openai.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | struct OpenAiChoice {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     finish_reason: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OpenAiChoice` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `role` is never read
[INFO] [stdout]   --> src/llm/openai.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | struct OpenAiMessage {
[INFO] [stdout]    |        ------------- field in this struct
[INFO] [stdout] 26 |     role: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OpenAiMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `total_tokens` is never read
[INFO] [stdout]   --> src/llm/openai.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | struct OpenAiUsage {
[INFO] [stdout]    |        ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 34 |     total_tokens: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OpenAiUsage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `model` is never read
[INFO] [stdout]   --> src/llm/openai.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | struct OpenAiStreamChunk {
[INFO] [stdout]    |        ----------------- field in this struct
[INFO] [stdout] 39 |     choices: Vec<OpenAiStreamChoice>,
[INFO] [stdout] 40 |     model: Option<String>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OpenAiStreamChunk` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `finish_reason` is never read
[INFO] [stdout]   --> src/llm/openai.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 44 | struct OpenAiStreamChoice {
[INFO] [stdout]    |        ------------------ field in this struct
[INFO] [stdout] 45 |     delta: OpenAiStreamDelta,
[INFO] [stdout] 46 |     finish_reason: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `OpenAiStreamChoice` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `elapsed_ms` is never used
[INFO] [stdout]    --> src/metrics.rs:168:12
[INFO] [stdout]     |
[INFO] [stdout] 161 | impl Timer {
[INFO] [stdout]     | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn elapsed_ms(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `get_node_text`, `find_nodes_by_kind`, `count_nodes_by_kind`, `get_depth`, `calculate_complexity`, and `walk_complexity` are never used
[INFO] [stdout]    --> src/parser/ast_utils.rs:7:12
[INFO] [stdout]     |
[INFO] [stdout]   6 | impl AstUtils {
[INFO] [stdout]     | ------------- associated functions in this implementation
[INFO] [stdout]   7 |     pub fn get_node_text<'a>(node: &Node, source: &'a str) -> &'a str {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  11 |     pub fn find_nodes_by_kind<'a>(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  26 |     pub fn count_nodes_by_kind(node: &Node, kind: &str) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  32 |     pub fn get_depth(node: &Node) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn calculate_complexity(node: &Node) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     fn walk_complexity<'a>(node: &Node<'a>, keywords: &[&str], count: &mut usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parse_file` is never used
[INFO] [stdout]   --> src/parser/parser.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl CodeParser {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn parse_file(&mut self, path: &str) -> Result<ParseResult> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `name` is never used
[INFO] [stdout]   --> src/resilience/circuit_breaker.rs:90:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | impl CircuitBreaker {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 90 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REPL_PROMPT` is never used
[INFO] [stdout]   --> src/repl/mod.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const REPL_PROMPT: &str = "agenthub> ";
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MULTILINE_PROMPT` is never used
[INFO] [stdout]   --> src/repl/mod.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const MULTILINE_PROMPT: &str = "... ";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stream` is never read
[INFO] [stdout]   --> src/server/handlers.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct ChatRequest {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub stream: bool,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_rate_limit` is never used
[INFO] [stdout]   --> src/server/state.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl AppState {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn with_rate_limit(mut self, config: &RateLimitConfig) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `description` is never used
[INFO] [stdout]   --> src/skills/mod.rs:43:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub trait Skill: Send + Sync {
[INFO] [stdout]    |           ----- method in this trait
[INFO] [stdout] 42 |     fn name(&self) -> &str;
[INFO] [stdout] 43 |     fn description(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `parser` is never read
[INFO] [stdout]   --> src/skills/code_explainer.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct CodeExplainerSkill {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 41 |     llm: Box<dyn LlmClient>,
[INFO] [stdout] 42 |     parser: CodeParser,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `explain_function` and `explain_at_line` are never used
[INFO] [stdout]    --> src/skills/code_explainer.rs:108:18
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl CodeExplainerSkill {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub async fn explain_function(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub async fn explain_at_line(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get` is never used
[INFO] [stdout]   --> src/skills/registry.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl SkillRegistry {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn get(&self, name: &str) -> Option<&dyn Skill> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `parser` is never read
[INFO] [stdout]   --> src/skills/test_generator.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct TestGeneratorSkill {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 43 |     llm: Box<dyn LlmClient>,
[INFO] [stdout] 44 |     parser: CodeParser,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `generate_tests_for_function` is never used
[INFO] [stdout]   --> src/skills/test_generator.rs:96:18
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl TestGeneratorSkill {
[INFO] [stdout]    | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub async fn generate_tests_for_function(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 58.04s
[INFO] running `Command { std: "docker" "inspect" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177", 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" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `File`
[INFO] [stderr]  --> src/audit.rs:4:15
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::fs::{File, OpenOptions};
[INFO] [stderr]   |               ^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Path`
[INFO] [stderr]  --> src/audit.rs:6:17
[INFO] [stderr]   |
[INFO] [stderr] 6 | use std::path::{Path, PathBuf};
[INFO] [stderr]   |                 ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `LlmError`
[INFO] [stderr]  --> src/llm/mod.rs:6:35
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::error::{AgentHubError, LlmError, Result};
[INFO] [stderr]   |                                   ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `gauge`
[INFO] [stderr]  --> src/metrics.rs:1:24
[INFO] [stderr]   |
[INFO] [stderr] 1 | use metrics::{counter, gauge, histogram};
[INFO] [stderr]   |                        ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `QueryCursor`
[INFO] [stderr]  --> src/parser/language.rs:4:36
[INFO] [stderr]   |
[INFO] [stderr] 4 | use tree_sitter::{Language, Query, QueryCursor};
[INFO] [stderr]   |                                    ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ast_utils::AstUtils`
[INFO] [stderr]  --> src/parser/mod.rs:5:9
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub use ast_utils::AstUtils;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `language::LanguageRegistry`
[INFO] [stderr]  --> src/parser/mod.rs:6:9
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub use language::LanguageRegistry;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `parser::CodeParser`
[INFO] [stderr]  --> src/parser/mod.rs:7:9
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub use parser::CodeParser;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `circuit_breaker::CircuitBreaker`
[INFO] [stderr]  --> src/resilience/mod.rs:4:9
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub use circuit_breaker::CircuitBreaker;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `retry::RetryPolicy`
[INFO] [stderr]  --> src/resilience/mod.rs:5:9
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub use retry::RetryPolicy;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Response`
[INFO] [stderr]  --> src/server/handlers.rs:6:36
[INFO] [stderr]   |
[INFO] [stderr] 6 | use axum::response::{IntoResponse, Response};
[INFO] [stderr]   |                                    ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `dir`
[INFO] [stderr]    --> src/guardrails/file_guard.rs:133:14
[INFO] [stderr]     |
[INFO] [stderr] 133 |         let (dir, workspace) = setup_workspace();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `dir`
[INFO] [stderr]    --> src/guardrails/file_guard.rs:160:14
[INFO] [stderr]     |
[INFO] [stderr] 160 |         let (dir, workspace) = setup_workspace();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `dir`
[INFO] [stderr]    --> src/guardrails/file_guard.rs:174:14
[INFO] [stderr]     |
[INFO] [stderr] 174 |         let (dir, workspace) = setup_workspace();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `dir`
[INFO] [stderr]    --> src/guardrails/file_guard.rs:188:14
[INFO] [stderr]     |
[INFO] [stderr] 188 |         let (dir, workspace) = setup_workspace();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `dir`
[INFO] [stderr]    --> src/guardrails/file_guard.rs:202:14
[INFO] [stderr]     |
[INFO] [stderr] 202 |         let (dir, workspace) = setup_workspace();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `dir`
[INFO] [stderr]    --> src/guardrails/file_guard.rs:217:14
[INFO] [stderr]     |
[INFO] [stderr] 217 |         let (dir, workspace) = setup_workspace();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_dir`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/parser/parser.rs:59:23
[INFO] [stderr]    |
[INFO] [stderr] 59 |             .map_err(|e| AgentHubError::FileReadError { path: path.to_string() })?;
[INFO] [stderr]    |                       ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `load_or_default` is never used
[INFO] [stderr]    --> src/config/mod.rs:320:12
[INFO] [stderr]     |
[INFO] [stderr] 263 | impl Settings {
[INFO] [stderr]     | ------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 320 |     pub fn load_or_default() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: multiple variants are never constructed
[INFO] [stderr]   --> src/error.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr]  4 | pub enum AgentHubError {
[INFO] [stderr]    |          ------------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 12 |     SkillExecutionFailed { reason: String },
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 18 |     InputBlocked { violation_type: String },
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 24 |     LlmUnavailable,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 27 |     LlmTimeout { timeout_secs: u64 },
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 33 |     FileNotFound { path: String },
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 36 |     FileReadError { path: String },
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 42 |     MissingConfig { field: String },
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 45 |     UnsupportedLanguage(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 51 |     InvalidRequest(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 54 |     UnknownCommand(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `AgentHubError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `InvalidManifest`, `InitializationFailed`, and `InvalidParameters` are never constructed
[INFO] [stderr]   --> src/error.rs:66:5
[INFO] [stderr]    |
[INFO] [stderr] 64 | pub enum SkillError {
[INFO] [stderr]    |          ---------- variants in this enum
[INFO] [stderr] 65 |     #[error("Invalid skill manifest: {0}")]
[INFO] [stderr] 66 |     InvalidManifest(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 69 |     InitializationFailed(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 72 |     InvalidParameters(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SkillError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `PromptInjectionDetected`, `PiiDetected`, and `RateLimited` are never constructed
[INFO] [stderr]   --> src/error.rs:78:5
[INFO] [stderr]    |
[INFO] [stderr] 76 | pub enum SecurityError {
[INFO] [stderr]    |          ------------- variants in this enum
[INFO] [stderr] 77 |     #[error("Prompt injection detected")]
[INFO] [stderr] 78 |     PromptInjectionDetected,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 81 |     PiiDetected { pii_type: String },
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 87 |     RateLimited,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SecurityError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `NoResponse`, `ContextLengthExceeded`, and `NoMoreResponses` are never constructed
[INFO] [stderr]    --> src/error.rs:111:5
[INFO] [stderr]     |
[INFO] [stderr]  97 | pub enum LlmError {
[INFO] [stderr]     |          -------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 111 |     NoResponse,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 117 |     ContextLengthExceeded,
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 123 |     NoMoreResponses,
[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] 
[INFO] [stderr] warning: methods `with_layer` and `validate_file_path` are never used
[INFO] [stderr]    --> src/guardrails/mod.rs:60:12
[INFO] [stderr]     |
[INFO] [stderr]  32 | impl SecurityPipeline {
[INFO] [stderr]     | --------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  60 |     pub fn with_layer(mut self, layer: Box<dyn Guardrail>) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 103 |     pub fn validate_file_path(&self, path: &str, workspace: &str) -> Result<String, SecurityError> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `validate_file_path` is never used
[INFO] [stderr]   --> src/guardrails/input_validator.rs:57:12
[INFO] [stderr]    |
[INFO] [stderr] 14 | impl InputValidator {
[INFO] [stderr]    | ------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 57 |     pub fn validate_file_path(&self, path: &str, workspace: &str) -> Result<String, SecurityError> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `test_allow_all_blocks_link_local` is never used
[INFO] [stderr]    --> src/guardrails/network_guard.rs:147:8
[INFO] [stderr]     |
[INFO] [stderr] 147 |     fn test_allow_all_blocks_link_local() {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/guardrails/output_sanitizer.rs:51:12
[INFO] [stderr]    |
[INFO] [stderr] 50 | impl OutputSanitizer {
[INFO] [stderr]    | -------------------- associated function in this implementation
[INFO] [stderr] 51 |     pub fn new() -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variant `Permissive` is never constructed
[INFO] [stderr]   --> src/guardrails/prompt_injection.rs:51:5
[INFO] [stderr]    |
[INFO] [stderr] 48 | pub enum InjectionThreshold {
[INFO] [stderr]    |          ------------------ variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 51 |     Permissive,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `InjectionThreshold` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `base_url`, `model`, `timeout`, `temperature`, and `max_tokens` are never read
[INFO] [stderr]    --> src/llm/mod.rs:96:5
[INFO] [stderr]     |
[INFO] [stderr]  95 | pub struct LlmClientBuilder {
[INFO] [stderr]     |            ---------------- fields in this struct
[INFO] [stderr]  96 |     base_url: String,
[INFO] [stderr]     |     ^^^^^^^^
[INFO] [stderr]  97 |     model: String,
[INFO] [stderr]     |     ^^^^^
[INFO] [stderr]  98 |     timeout: Duration,
[INFO] [stderr]     |     ^^^^^^^
[INFO] [stderr]  99 |     temperature: f32,
[INFO] [stderr]     |     ^^^^^^^^^^^
[INFO] [stderr] 100 |     max_tokens: usize,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `base_url`, `model`, `timeout`, `temperature`, `max_tokens`, and `build` are never used
[INFO] [stderr]    --> src/llm/mod.rs:114:12
[INFO] [stderr]     |
[INFO] [stderr] 103 | impl LlmClientBuilder {
[INFO] [stderr]     | --------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 114 |     pub fn base_url(mut self, url: &str) -> Self {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 119 |     pub fn model(mut self, model: &str) -> Self {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 124 |     pub fn timeout(mut self, timeout: Duration) -> Self {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 129 |     pub fn temperature(mut self, temp: f32) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 134 |     pub fn max_tokens(mut self, tokens: usize) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 139 |     pub fn build(self) -> Result<Box<dyn LlmClient>> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `system` is never used
[INFO] [stderr]    --> src/llm/mod.rs:239:12
[INFO] [stderr]     |
[INFO] [stderr] 230 | impl Message {
[INFO] [stderr]     | ------------ associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 239 |     pub fn system(content: String) -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `add_response` is never used
[INFO] [stderr]   --> src/llm/mock.rs:68:18
[INFO] [stderr]    |
[INFO] [stderr] 43 | impl MockLlmClient {
[INFO] [stderr]    | ------------------ method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 68 |     pub async fn add_response(&self, response: MockResponse) {
[INFO] [stderr]    |                  ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `role` is never read
[INFO] [stderr]   --> src/llm/ollama.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 21 | struct OllamaMessage {
[INFO] [stderr]    |        ------------- field in this struct
[INFO] [stderr] 22 |     role: String,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `OllamaMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: struct `OllamaModelsResponse` is never constructed
[INFO] [stderr]   --> src/llm/ollama.rs:27:8
[INFO] [stderr]    |
[INFO] [stderr] 27 | struct OllamaModelsResponse {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `OllamaModel` is never constructed
[INFO] [stderr]   --> src/llm/ollama.rs:32:8
[INFO] [stderr]    |
[INFO] [stderr] 32 | struct OllamaModel {
[INFO] [stderr]    |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `list_models` and `is_available` are never used
[INFO] [stderr]   --> src/llm/ollama.rs:68:18
[INFO] [stderr]    |
[INFO] [stderr] 45 | impl OllamaClient {
[INFO] [stderr]    | ----------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 68 |     pub async fn list_models(&self) -> Result<Vec<String>> {
[INFO] [stderr]    |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 92 |     pub async fn is_available(&self) -> bool {
[INFO] [stderr]    |                  ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `finish_reason` is never read
[INFO] [stderr]   --> src/llm/openai.rs:21:5
[INFO] [stderr]    |
[INFO] [stderr] 18 | struct OpenAiChoice {
[INFO] [stderr]    |        ------------ field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 21 |     finish_reason: Option<String>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `OpenAiChoice` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `role` is never read
[INFO] [stderr]   --> src/llm/openai.rs:26:5
[INFO] [stderr]    |
[INFO] [stderr] 25 | struct OpenAiMessage {
[INFO] [stderr]    |        ------------- field in this struct
[INFO] [stderr] 26 |     role: String,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `OpenAiMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `total_tokens` is never read
[INFO] [stderr]   --> src/llm/openai.rs:34:5
[INFO] [stderr]    |
[INFO] [stderr] 31 | struct OpenAiUsage {
[INFO] [stderr]    |        ----------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 34 |     total_tokens: Option<usize>,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `OpenAiUsage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `model` is never read
[INFO] [stderr]   --> src/llm/openai.rs:40:5
[INFO] [stderr]    |
[INFO] [stderr] 38 | struct OpenAiStreamChunk {
[INFO] [stderr]    |        ----------------- field in this struct
[INFO] [stderr] 39 |     choices: Vec<OpenAiStreamChoice>,
[INFO] [stderr] 40 |     model: Option<String>,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `OpenAiStreamChunk` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `finish_reason` is never read
[INFO] [stderr]   --> src/llm/openai.rs:46:5
[INFO] [stderr]    |
[INFO] [stderr] 44 | struct OpenAiStreamChoice {
[INFO] [stderr]    |        ------------------ field in this struct
[INFO] [stderr] 45 |     delta: OpenAiStreamDelta,
[INFO] [stderr] 46 |     finish_reason: Option<String>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `OpenAiStreamChoice` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `elapsed_ms` is never used
[INFO] [stderr]    --> src/metrics.rs:168:12
[INFO] [stderr]     |
[INFO] [stderr] 161 | impl Timer {
[INFO] [stderr]     | ---------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 168 |     pub fn elapsed_ms(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `get_node_text`, `find_nodes_by_kind`, `count_nodes_by_kind`, `get_depth`, `calculate_complexity`, and `walk_complexity` are never used
[INFO] [stderr]    --> src/parser/ast_utils.rs:7:12
[INFO] [stderr]     |
[INFO] [stderr]   6 | impl AstUtils {
[INFO] [stderr]     | ------------- associated functions in this implementation
[INFO] [stderr]   7 |     pub fn get_node_text<'a>(node: &Node, source: &'a str) -> &'a str {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  11 |     pub fn find_nodes_by_kind<'a>(
[INFO] [stdout] 
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] running 167 tests
[INFO] [stderr] ...
[INFO] [stderr]  26 |     pub fn count_nodes_by_kind(node: &Node, kind: &str) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  32 |     pub fn get_depth(node: &Node) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  90 |     pub fn calculate_complexity(node: &Node) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 114 |     fn walk_complexity<'a>(node: &Node<'a>, keywords: &[&str], count: &mut usize) {
[INFO] [stdout] test audit::tests::test_audit_entry_creation ... ok
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] test audit::tests::test_audit_entry_serialization ... ok
[INFO] [stderr] 
[INFO] [stdout] test audit::tests::test_auto_flush_on_buffer_full ... ok
[INFO] [stderr] warning: method `parse_file` is never used
[INFO] [stdout] test audit::tests::test_cleanup_preserves_recent ... ok
[INFO] [stderr]   --> src/parser/parser.rs:52:12
[INFO] [stdout] test audit::tests::test_log_and_flush ... ok
[INFO] [stderr]    |
[INFO] [stdout] test audit::tests::test_cleanup_expired ... ok
[INFO] [stderr] 29 | impl CodeParser {
[INFO] [stdout] test config::tests::test_llm_config_default_provider ... ok
[INFO] [stderr]    | --------------- method in this implementation
[INFO] [stdout] test config::tests::test_expand_path_no_tilde ... ok
[INFO] [stderr] ...
[INFO] [stdout] test audit::tests::test_audit_entry_builder ... ok
[INFO] [stderr] 52 |     pub fn parse_file(&mut self, path: &str) -> Result<ParseResult> {
[INFO] [stdout] test audit::tests::test_with_retention_days ... ok
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stdout] test config::tests::test_expand_path ... ok
[INFO] [stderr] 
[INFO] [stdout] test audit::tests::test_query_entries ... ok
[INFO] [stderr] warning: method `name` is never used
[INFO] [stdout] test config::tests::test_provider_type_deserialization ... ok
[INFO] [stderr]   --> src/resilience/circuit_breaker.rs:90:12
[INFO] [stdout] test config::tests::test_llm_config_provider_names ... ok
[INFO] [stderr]    |
[INFO] [stdout] test config::tests::test_llm_config_get_provider ... ok
[INFO] [stderr] 75 | impl CircuitBreaker {
[INFO] [stdout] test guardrails::input_validator::tests::test_blocked_pattern_rejected ... ok
[INFO] [stderr]    | ------------------- method in this implementation
[INFO] [stdout] test guardrails::file_guard::tests::test_blocks_ssh_key ... ok
[INFO] [stderr] ...
[INFO] [stdout] test guardrails::file_guard::tests::test_blocks_env_file ... ok
[INFO] [stderr] 90 |     pub fn name(&self) -> &str {
[INFO] [stdout] test guardrails::file_guard::tests::test_read_file_success ... ok
[INFO] [stderr]    |            ^^^^
[INFO] [stdout] test guardrails::file_guard::tests::test_blocks_outside_workspace ... ok
[INFO] [stderr] 
[INFO] [stdout] test guardrails::file_guard::tests::test_read_file_blocked ... ok
[INFO] [stderr] warning: constant `REPL_PROMPT` is never used
[INFO] [stdout] test guardrails::file_guard::tests::test_allows_workspace_file ... ok
[INFO] [stderr]   --> src/repl/mod.rs:14:7
[INFO] [stdout] test guardrails::input_validator::tests::test_clean_input_no_warnings ... ok
[INFO] [stderr]    |
[INFO] [stdout] test guardrails::input_validator::tests::test_detect_rtl_override ... ok
[INFO] [stderr] 14 | const REPL_PROMPT: &str = "agenthub> ";
[INFO] [stdout] test guardrails::input_validator::tests::test_empty_input_rejected ... ok
[INFO] [stderr]    |       ^^^^^^^^^^^
[INFO] [stdout] test guardrails::input_validator::tests::test_guardrail_block_empty ... ok
[INFO] [stderr] 
[INFO] [stdout] test guardrails::file_guard::tests::test_default_guard ... ok
[INFO] [stderr] warning: constant `MULTILINE_PROMPT` is never used
[INFO] [stdout] test guardrails::input_validator::tests::test_oversized_input_rejected ... ok
[INFO] [stderr]   --> src/repl/mod.rs:15:7
[INFO] [stderr]    |
[INFO] [stderr] 15 | const MULTILINE_PROMPT: &str = "... ";
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `stream` is never read
[INFO] [stderr]   --> src/server/handlers.rs:15:9
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub struct ChatRequest {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 15 |     pub stream: bool,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `with_rate_limit` is never used
[INFO] [stderr]   --> src/server/state.rs:34:12
[INFO] [stderr]    |
[INFO] [stderr] 15 | impl AppState {
[INFO] [stderr]    | ------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 34 |     pub fn with_rate_limit(mut self, config: &RateLimitConfig) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `description` is never used
[INFO] [stderr]   --> src/skills/mod.rs:43:8
[INFO] [stderr]    |
[INFO] [stderr] 41 | pub trait Skill: Send + Sync {
[INFO] [stderr]    |           ----- method in this trait
[INFO] [stderr] 42 |     fn name(&self) -> &str;
[INFO] [stderr] 43 |     fn description(&self) -> &str;
[INFO] [stderr]    |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `parser` is never read
[INFO] [stderr]   --> src/skills/code_explainer.rs:42:5
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub struct CodeExplainerSkill {
[INFO] [stderr]    |            ------------------ field in this struct
[INFO] [stderr] 41 |     llm: Box<dyn LlmClient>,
[INFO] [stderr] 42 |     parser: CodeParser,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `explain_function` and `explain_at_line` are never used
[INFO] [stderr]    --> src/skills/code_explainer.rs:108:18
[INFO] [stderr]     |
[INFO] [stderr]  47 | impl CodeExplainerSkill {
[INFO] [stderr]     | ----------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 108 |     pub async fn explain_function(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 124 |     pub async fn explain_at_line(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `get` is never used
[INFO] [stderr]   --> src/skills/registry.rs:21:12
[INFO] [stderr]    |
[INFO] [stderr]  9 | impl SkillRegistry {
[INFO] [stderr]    | ------------------ method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 21 |     pub fn get(&self, name: &str) -> Option<&dyn Skill> {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `parser` is never read
[INFO] [stderr]   --> src/skills/test_generator.rs:44:5
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub struct TestGeneratorSkill {
[INFO] [stderr]    |            ------------------ field in this struct
[INFO] [stderr] 43 |     llm: Box<dyn LlmClient>,
[INFO] [stderr] 44 |     parser: CodeParser,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `generate_tests_for_function` is never used
[INFO] [stderr]   --> src/skills/test_generator.rs:96:18
[INFO] [stderr]    |
[INFO] [stderr] 49 | impl TestGeneratorSkill {
[INFO] [stderr]    | ----------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 96 |     pub async fn generate_tests_for_function(
[INFO] [stderr]    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `agenthub` (bin "agenthub" test) generated 55 warnings (run `cargo fix --bin "agenthub" -p agenthub --tests` to apply 18 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.55s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/agenthub-89f12009e25059e7)
[INFO] [stdout] test guardrails::input_validator::tests::test_sanitize_preserves_normal_text ... ok
[INFO] [stdout] test guardrails::input_validator::tests::test_null_bytes_rejected ... ok
[INFO] [stdout] test guardrails::input_validator::tests::test_unicode_normalization ... ok
[INFO] [stdout] test guardrails::input_validator::tests::test_zero_width_char_removal ... ok
[INFO] [stdout] test guardrails::input_validator::tests::test_valid_input ... ok
[INFO] [stdout] test guardrails::input_validator::tests::test_detect_zero_width_chars ... ok
[INFO] [stdout] test guardrails::input_validator::tests::test_guardrail_pass ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_allow_all_blocks_localhost ... ok
[INFO] [stdout] test guardrails::input_validator::tests::test_guardrail_block_oversized ... ok
[INFO] [stdout] test guardrails::file_guard::tests::test_workspace_only_disabled ... ok
[INFO] [stdout] test guardrails::input_validator::tests::test_detect_unicode_confusable ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_allow_all_permits_public_url ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_blocks_loopback_ipv6 ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_default_guard_allows_localhost_when_explicitly_allowed ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_blocks_zero_ip ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_default_guard_denies_all ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_invalid_url_rejected ... ok
[INFO] [stdout] test guardrails::file_guard::tests::test_blocks_git_directory ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_strict_allows_listed_domain ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_allow_all_blocks_private_ip ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_strict_allows_subdomain_of_listed ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_strict_blocks_unlisted_domain ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_guardrail_name ... ok
[INFO] [stdout] test guardrails::network_guard::tests::test_strict_still_blocks_private_ip ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_sanitize_preserves_normal_text ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_sanitize_normal_markdown_preserved ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_javascript_link_warned ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_api_key_leak_blocked ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_sanitize_redacts_credentials ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_private_key_leak_blocked ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_script_tag_warned ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_sanitize_strips_javascript_links ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_credential_leak_blocked ... ok
[INFO] [stdout] test guardrails::output_sanitizer::tests::test_clean_output_passes ... ok
[INFO] [stdout] test guardrails::rate_limiter::tests::test_blocks_over_limit ... ok
[INFO] [stdout] test guardrails::rate_limiter::tests::test_burst_limit ... ok
[INFO] [stdout] test guardrails::rate_limiter::tests::test_cleanup ... ok
[INFO] [stdout] test guardrails::rate_limiter::tests::test_global_limit ... ok
[INFO] [stdout] test guardrails::rate_limiter::tests::test_per_user_isolation ... ok
[INFO] [stdout] test guardrails::rate_limiter::tests::test_default_config ... ok
[INFO] [stdout] test guardrails::rate_limiter::tests::test_remaining ... ok
[INFO] [stdout] test audit::tests::test_from_config ... ok
[INFO] [stdout] test config::tests::test_default_settings ... ok
[INFO] [stdout] test guardrails::rate_limiter::tests::test_allows_under_limit ... ok
[INFO] [stdout] test guardrails::tests::test_pipeline_blocks_empty_input ... ok
[INFO] [stdout] test guardrails::tests::test_pipeline_default_has_layers ... ok
[INFO] [stdout] test guardrails::tests::test_pipeline_from_config ... ok
[INFO] [stdout] test llm::mock::tests::test_mock_complete ... ok
[INFO] [stdout] test llm::mock::tests::test_mock_failure ... ok
[INFO] [stdout] test llm::mock::tests::test_mock_request_log ... ok
[INFO] [stdout] test llm::mock::tests::test_mock_stream ... ok
[INFO] [stdout] test llm::ollama::tests::test_build_request_body ... ok
[INFO] [stdout] test llm::ollama::tests::test_ollama_client_creation ... ok
[INFO] [stdout] test llm::openai::tests::test_build_request_body ... ok
[INFO] [stdout] test llm::openai::tests::test_openai_client_creation ... ok
[INFO] [stdout] test llm::tests::test_llm_request_builder ... ok
[INFO] [stdout] test llm::tests::test_llm_response ... ok
[INFO] [stdout] test llm::tests::test_messages_from_prompt ... ok
[INFO] [stdout] test metrics::tests::test_empty_metrics ... ok
[INFO] [stdout] test metrics::tests::test_metrics_collector_llm ... ok
[INFO] [stdout] test metrics::tests::test_metrics_collector_parse ... ok
[INFO] [stdout] test metrics::tests::test_metrics_collector_security ... ok
[INFO] [stdout] test metrics::tests::test_metrics_collector_skill ... ok
[INFO] [stdout] test metrics::tests::test_snapshot ... ok
[INFO] [stdout] test metrics::tests::test_timer ... ok
[INFO] [stdout] test parser::ast_utils::tests::test_comment_ratio_python ... ok
[INFO] [stdout] test parser::ast_utils::tests::test_comment_ratio_rust ... ok
[INFO] [stdout] test parser::ast_utils::tests::test_empty_source_comment_ratio ... ok
[INFO] [stdout] test parser::ast_utils::tests::test_extract_imports_javascript ... ok
[INFO] [stdout] test parser::ast_utils::tests::test_extract_imports_python ... ok
[INFO] [stdout] test parser::ast_utils::tests::test_extract_imports_rust ... ok
[INFO] [stdout] test parser::language::tests::test_is_supported ... ok
[INFO] [stdout] test parser::language::tests::test_language_from_extension ... ok
[INFO] [stdout] test parser::language::tests::test_language_from_filename ... ok
[INFO] [stdout] test parser::language::tests::test_language_properties ... ok
[INFO] [stdout] test parser::language::tests::test_registry_creation ... ok
[INFO] [stdout] test parser::language::tests::test_registry_parse_python ... ok
[INFO] [stdout] test parser::language::tests::test_registry_parse_rust ... ok
[INFO] [stdout] test parser::parser::tests::test_get_function_at_line ... ok
[INFO] [stdout] test guardrails::tests::test_pipeline_blocks_oversized_input ... ok
[INFO] [stdout] test parser::parser::tests::test_get_function_by_name ... ok
[INFO] [stdout] test parser::parser::tests::test_parse_javascript ... ok
[INFO] [stdout] test guardrails::pii_detector::tests::test_permissive_mode_warns ... ok
[INFO] [stdout] test repl::tests::test_parse_command_chat ... ok
[INFO] [stdout] test guardrails::pii_detector::tests::test_clean_input_passes ... ok
[INFO] [stdout] test parser::parser::tests::test_parse_python_function ... ok
[INFO] [stdout] test repl::tests::test_parse_command_explain ... ok
[INFO] [stdout] test guardrails::pii_detector::tests::test_email_detected ... ok
[INFO] [stdout] test guardrails::tests::test_pipeline_sanitizes_output ... ok
[INFO] [stdout] test guardrails::pii_detector::tests::test_phone_detected ... ok
[INFO] [stdout] test repl::tests::test_parse_command_help ... ok
[INFO] [stdout] test parser::parser::tests::test_parse_rust_function ... ok
[INFO] [stdout] test repl::tests::test_parse_command_providers ... ok
[INFO] [stdout] test repl::tests::test_parse_command_skills ... ok
[INFO] [stdout] test repl::tests::test_parse_command_test ... ok
[INFO] [stdout] test repl::tests::test_parse_command_unknown ... ok
[INFO] [stdout] test resilience::circuit_breaker::tests::test_initial_state_closed ... ok
[INFO] [stdout] test resilience::circuit_breaker::tests::test_opens_after_failures ... ok
[INFO] [stdout] test resilience::circuit_breaker::tests::test_execute_blocked_when_open ... ok
[INFO] [stdout] test resilience::circuit_breaker::tests::test_success_resets_failure_count ... ok
[INFO] [stdout] test guardrails::pii_detector::tests::test_credential_detected ... ok
[INFO] [stdout] test resilience::circuit_breaker::tests::test_stays_closed_under_threshold ... ok
[INFO] [stdout] test repl::tests::test_parse_command_use ... ok
[INFO] [stdout] test guardrails::tests::test_pipeline_blocks_credential_in_output ... ok
[INFO] [stdout] test repl::tests::test_parse_command_quit ... ok
[INFO] [stdout] test resilience::circuit_breaker::tests::test_execute_failure ... ok
[INFO] [stdout] test resilience::circuit_breaker::tests::test_execute_success ... ok
[INFO] [stdout] test resilience::retry::tests::test_default_policy ... ok
[INFO] [stdout] test resilience::retry::tests::test_non_retryable_errors ... ok
[INFO] [stdout] test guardrails::pii_detector::tests::test_redaction ... ok
[INFO] [stdout] test resilience::retry::tests::test_custom_policy ... ok
[INFO] [stdout] test resilience::retry::tests::test_retryable_errors ... ok
[INFO] [stdout] test server::handlers::tests::test_default_temperature ... ok
[INFO] [stdout] test skills::code_explainer::tests::test_build_prompt_with_context ... ok
[INFO] [stdout] test skills::code_explainer::tests::test_build_prompt_without_context ... ok
[INFO] [stdout] test skills::code_explainer::tests::test_resolve_language ... ok
[INFO] [stdout] test server::handlers::tests::test_skill_info ... ok
[INFO] [stdout] test server::handlers::tests::test_health_response ... ok
[INFO] [stdout] test skills::code_explainer::tests::test_resolve_language_explicit ... ok
[INFO] [stdout] test server::routes::tests::test_chat_endpoint ... ok
[INFO] [stdout] test server::routes::tests::test_health_endpoint ... ok
[INFO] [stdout] test skills::code_explainer::tests::test_skill_manifest ... ok
[INFO] [stdout] test skills::registry::tests::test_execute_missing_skill ... ok
[INFO] [stdout] test skills::test_generator::tests::test_build_prompt ... ok
[INFO] [stdout] test server::routes::tests::test_skills_endpoint ... ok
[INFO] [stdout] test skills::registry::tests::test_execute_skill ... ok
[INFO] [stdout] test skills::registry::tests::test_register_and_list ... ok
[INFO] [stdout] test skills::test_generator::tests::test_skill_manifest ... ok
[INFO] [stdout] test resilience::retry::tests::test_retry_exhausted ... ok
[INFO] [stdout] test guardrails::prompt_injection::tests::test_strict_threshold ... ok
[INFO] [stdout] test guardrails::tests::test_pipeline_passes_clean_input ... ok
[INFO] [stdout] test guardrails::prompt_injection::tests::test_clean_input_passes ... ok
[INFO] [stdout] test guardrails::prompt_injection::tests::test_injection_blocked ... ok
[INFO] [stdout] test guardrails::prompt_injection::tests::test_system_prefix_blocked ... ok
[INFO] [stdout] test guardrails::prompt_injection::tests::test_role_switch_detected ... ok
[INFO] [stdout] test server::routes::tests::test_parse_endpoint ... ok
[INFO] [stdout] test skills::test_generator::tests::test_generate_tests_mock ... ok
[INFO] [stdout] test skills::code_explainer::tests::test_explain_code_mock ... ok
[INFO] [stdout] test resilience::retry::tests::test_retry_succeeds_eventually ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 167 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.32s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177", kill_on_drop: false }`
[INFO] [stdout] 17f7e6a810acbea9273f859019b7d5c1db629cd148d6b75ad2ee921209bc4177
