[INFO] cloning repository https://github.com/sunO2/scrs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sunO2/scrs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FsunO2%2Fscrs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FsunO2%2Fscrs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 93d02e05dac6d3a08bd7314e862ad8c05ec075f0
[INFO] checking sunO2/scrs against master#57f772f25c5ce2bd870d6f8c3ab318eaee5a3326 for pr-133502-22
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FsunO2%2Fscrs" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/sunO2/scrs
[INFO] finished tweaking git repo https://github.com/sunO2/scrs
[INFO] tweaked toml for git repo https://github.com/sunO2/scrs written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/sunO2/scrs on toolchain 57f772f25c5ce2bd870d6f8c3ab318eaee5a3326
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+57f772f25c5ce2bd870d6f8c3ab318eaee5a3326" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/sunO2/scrs 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" "+57f772f25c5ce2bd870d6f8c3ab318eaee5a3326" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded toml_writer v1.0.6+spec-1.1.0
[INFO] [stderr]   Downloaded serde_spanned v1.0.4
[INFO] [stderr]   Downloaded socketioxide-parser-common v0.17.0
[INFO] [stderr]   Downloaded engineioxide-core v0.2.0
[INFO] [stderr]   Downloaded socketioxide v0.18.0
[INFO] [stderr]   Downloaded toml v0.9.10+spec-1.1.0
[INFO] [stderr]   Downloaded engineioxide v0.17.2
[INFO] [stderr]   Downloaded socketioxide-core v0.17.0
[INFO] [stderr]   Downloaded zmij v1.0.7
[INFO] [stderr]   Downloaded zune-core v0.5.0
[INFO] [stderr]   Downloaded zune-jpeg v0.5.8
[INFO] [stderr]   Downloaded adb_client v3.0.0
[INFO] [stderr]   Downloaded rcgen v0.14.6
[INFO] [stderr]   Downloaded base64ct v1.8.1
[INFO] [stderr]   Downloaded oid-registry v0.8.1
[INFO] [stderr]   Downloaded unty v0.0.4
[INFO] [stderr]   Downloaded asn1-rs-derive v0.6.0
[INFO] [stderr]   Downloaded bincode_derive v2.0.1
[INFO] [stderr]   Downloaded x509-parser v0.18.0
[INFO] [stderr]   Downloaded asn1-rs v0.7.1
[INFO] [stderr]   Downloaded bincode v2.0.1
[INFO] [stderr]   Downloaded virtue v0.0.18
[INFO] [stderr]   Downloaded quick-protobuf v0.8.1
[INFO] [stderr]   Downloaded der-parser v10.0.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+57f772f25c5ce2bd870d6f8c3ab318eaee5a3326" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 778218f22be61b779489444563541806d1cadfa128e0e36988c326bc34aa382d
[INFO] running `Command { std: "docker" "start" "-a" "778218f22be61b779489444563541806d1cadfa128e0e36988c326bc34aa382d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "778218f22be61b779489444563541806d1cadfa128e0e36988c326bc34aa382d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "778218f22be61b779489444563541806d1cadfa128e0e36988c326bc34aa382d", kill_on_drop: false }`
[INFO] [stdout] 778218f22be61b779489444563541806d1cadfa128e0e36988c326bc34aa382d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+57f772f25c5ce2bd870d6f8c3ab318eaee5a3326" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 4e9e15ec9e1c417d9a47405e7481d79203b3e0f580de1fa5a488d93dd3b56923
[INFO] running `Command { std: "docker" "start" "-a" "4e9e15ec9e1c417d9a47405e7481d79203b3e0f580de1fa5a488d93dd3b56923", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.104
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling zerocopy v0.8.31
[INFO] [stderr]     Checking const-oid v0.9.6
[INFO] [stderr]    Compiling find-msvc-tools v0.1.6
[INFO] [stderr]     Checking tracing-core v0.1.36
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]    Compiling aws-lc-rs v1.15.2
[INFO] [stderr]     Checking indexmap v2.13.0
[INFO] [stderr]    Compiling zmij v1.0.7
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]    Compiling rustls v0.23.35
[INFO] [stderr]    Compiling serde_json v1.0.148
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking base64ct v1.8.1
[INFO] [stderr]     Checking lazy_static v1.5.0
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking rand_core v0.9.3
[INFO] [stderr]    Compiling cc v1.2.51
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]     Checking as-slice v0.2.1
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]    Compiling av-scenechange v0.14.1
[INFO] [stderr]    Compiling built v0.8.0
[INFO] [stderr]     Checking aligned v0.4.3
[INFO] [stderr]     Checking pem-rfc7468 v0.7.0
[INFO] [stderr]     Checking core2 v0.4.0
[INFO] [stderr]    Compiling pastey v0.1.1
[INFO] [stderr]     Checking y4m v0.8.0
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking bitflags v2.10.0
[INFO] [stderr]     Checking time v0.3.44
[INFO] [stderr]     Checking bitstream-io v4.9.0
[INFO] [stderr]     Checking maybe-rayon v0.1.1
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]    Compiling num-bigint-dig v0.8.6
[INFO] [stderr]     Checking der v0.7.10
[INFO] [stderr]     Checking loop9 v0.1.5
[INFO] [stderr]     Checking zune-jpeg v0.4.21
[INFO] [stderr]     Checking avif-serialize v0.8.6
[INFO] [stderr]     Checking zune-inflate v0.2.54
[INFO] [stderr]     Checking num-iter v0.1.45
[INFO] [stderr]     Checking pxfm v0.1.27
[INFO] [stderr]    Compiling virtue v0.0.18
[INFO] [stderr]    Compiling rav1e v0.8.1
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]     Checking rgb v0.8.52
[INFO] [stderr]    Compiling quote v1.0.42
[INFO] [stderr]     Checking lebe v0.5.3
[INFO] [stderr]     Checking bit_field v0.10.3
[INFO] [stderr]     Checking openssl-probe v0.2.0
[INFO] [stderr]     Checking zune-core v0.5.0
[INFO] [stderr]     Checking image-webp v0.2.4
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling syn v2.0.112
[INFO] [stderr]     Checking qoi v0.4.1
[INFO] [stderr]     Checking gif v0.14.1
[INFO] [stderr]    Compiling simd_helpers v0.1.0
[INFO] [stderr]     Checking rustls-native-certs v0.8.3
[INFO] [stderr]    Compiling cmake v0.1.57
[INFO] [stderr]     Checking zune-jpeg v0.5.8
[INFO] [stderr]     Checking png v0.18.0
[INFO] [stderr]     Checking signature v2.2.0
[INFO] [stderr]    Compiling bincode_derive v2.0.1
[INFO] [stderr]     Checking regex-automata v0.4.13
[INFO] [stderr]    Compiling rust-embed-utils v8.9.0
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking sharded-slab v0.1.7
[INFO] [stderr]     Checking pem v3.0.6
[INFO] [stderr]     Checking thread_local v1.1.9
[INFO] [stderr]     Checking spki v0.7.3
[INFO] [stderr]     Checking winnow v0.7.14
[INFO] [stderr]     Checking ryu v1.0.22
[INFO] [stderr]     Checking iri-string v0.7.10
[INFO] [stderr]     Checking unty v0.0.4
[INFO] [stderr]     Checking pkcs8 v0.10.2
[INFO] [stderr]     Checking quick-protobuf v0.8.1
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]     Checking pkcs1 v0.7.5
[INFO] [stderr]     Checking toml_writer v1.0.6+spec-1.1.0
[INFO] [stderr]    Compiling aws-lc-sys v0.35.0
[INFO] [stderr]     Checking serde_path_to_error v0.1.20
[INFO] [stderr]     Checking serde_spanned v1.0.4
[INFO] [stderr]     Checking toml_datetime v0.7.5+spec-1.1.0
[INFO] [stderr]     Checking uuid v1.19.0
[INFO] [stderr]     Checking yasna v0.5.2
[INFO] [stderr]     Checking toml_parser v1.0.6+spec-1.1.0
[INFO] [stderr]     Checking moxcms v0.7.11
[INFO] [stderr]     Checking toml v0.9.10+spec-1.1.0
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]     Checking regex v1.12.2
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling zerocopy-derive v0.8.31
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.17
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling equator-macro v0.4.2
[INFO] [stderr]    Compiling arg_enum_proc_macro v0.3.4
[INFO] [stderr]    Compiling profiling-procmacros v1.0.17
[INFO] [stderr]     Checking profiling v1.0.17
[INFO] [stderr]    Compiling fax_derive v0.2.0
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]     Checking fax v0.2.6
[INFO] [stderr]     Checking equator v0.4.2
[INFO] [stderr]    Compiling rust-embed-impl v8.9.0
[INFO] [stderr]    Compiling serde_repr v0.1.20
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]     Checking aligned-vec v0.6.4
[INFO] [stderr]     Checking v_frame v0.3.9
[INFO] [stderr]     Checking rust-embed v8.9.0
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking av1-grain v0.2.5
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]     Checking thiserror v2.0.17
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]     Checking bytes v1.11.0
[INFO] [stderr]     Checking bincode v2.0.1
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking chrono v0.4.42
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking tracing-subscriber v0.3.22
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking half v2.7.1
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking http v1.4.0
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking tiff v0.10.3
[INFO] [stderr]     Checking exr v1.74.0
[INFO] [stderr]     Checking tokio v1.48.0
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking tracing-appender v0.2.4
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]     Checking engineioxide-core v0.2.0
[INFO] [stderr]     Checking tungstenite v0.28.0
[INFO] [stderr]     Checking http-body-util v0.1.3
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking socketioxide-core v0.17.0
[INFO] [stderr]     Checking axum-core v0.5.6
[INFO] [stderr]     Checking socketioxide-parser-common v0.17.0
[INFO] [stderr]     Checking rustls-webpki v0.103.8
[INFO] [stderr]     Checking rcgen v0.14.6
[INFO] [stderr]     Checking rsa v0.9.9
[INFO] [stderr]     Checking ravif v0.12.0
[INFO] [stderr]     Checking image v0.25.9
[INFO] [stderr]     Checking tokio-util v0.7.17
[INFO] [stderr]     Checking tower v0.5.2
[INFO] [stderr]     Checking tokio-tungstenite v0.28.0
[INFO] [stderr]     Checking tokio-stream v0.1.18
[INFO] [stderr]     Checking h2 v0.4.13
[INFO] [stderr]     Checking tower-http v0.6.8
[INFO] [stderr]     Checking tokio-rustls v0.26.4
[INFO] [stderr]     Checking rustls-platform-verifier v0.6.2
[INFO] [stderr]     Checking adb_client v3.0.0
[INFO] [stderr]     Checking hyper v1.8.1
[INFO] [stderr]     Checking hyper-util v0.1.19
[INFO] [stderr]     Checking engineioxide v0.17.2
[INFO] [stderr]     Checking hyper-rustls v0.27.7
[INFO] [stderr]     Checking axum v0.8.8
[INFO] [stderr]     Checking reqwest v0.13.1
[INFO] [stderr]     Checking socketioxide v0.18.0
[INFO] [stderr]     Checking scrcpy-rs v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> src/context/mod.rs:3:19
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use context::{Context, IContext};
[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: `debug`
[INFO] [stdout]  --> src/agent/core/agent_group.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{debug, info, warn};
[INFO] [stdout]   |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ModelClient`
[INFO] [stdout]  --> src/agent/core/agent_group.rs:5:49
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::agent::core::traits::{Agent, Device, ModelClient};
[INFO] [stdout]   |                                                 ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> src/agent/llm/client.rs:4:29
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{debug, error, info};
[INFO] [stdout]   |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> src/context/mod.rs:3:19
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use context::{Context, IContext};
[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: `warn`
[INFO] [stdout]  --> src/agent/llm/parser.rs:2:22
[INFO] [stdout]   |
[INFO] [stdout] 2 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::RwLock`
[INFO] [stdout]  --> src/agent/llm/autoglm_client.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `debug`
[INFO] [stdout]  --> src/agent/core/agent_group.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{debug, info, warn};
[INFO] [stdout]   |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ModelClient`
[INFO] [stdout]  --> src/agent/core/agent_group.rs:5:49
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::agent::core::traits::{Agent, Device, ModelClient};
[INFO] [stdout]   |                                                 ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `client::*`
[INFO] [stdout]  --> src/agent/llm/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use client::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parser::*`
[INFO] [stdout]   --> src/agent/llm/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use parser::*;
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `autoglm_client::*`
[INFO] [stdout]   --> src/agent/llm/mod.rs:12:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub use autoglm_client::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prompts::*`
[INFO] [stdout]   --> src/agent/llm/mod.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use prompts::*;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error` and `warn`
[INFO] [stdout]  --> src/agent/executor/device_wrapper.rs:8:28
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, info, error, warn};
[INFO] [stdout]   |                            ^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]    --> src/agent/executor/device_wrapper.rs:579:36
[INFO] [stdout]     |
[INFO] [stdout] 579 |         use tracing::{info, debug, warn, error};
[INFO] [stdout]     |                                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::agent::core::traits::ParsedAction`
[INFO] [stdout]  --> src/agent/executor/handler.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::agent::core::traits::ParsedAction;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/agent/executor/handler.rs:6:34
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::{debug, info, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> src/agent/llm/client.rs:4:29
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tracing::{debug, error, info};
[INFO] [stdout]   |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `retry::*`
[INFO] [stdout]  --> src/agent/executor/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use retry::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> src/agent/llm/parser.rs:2:22
[INFO] [stdout]   |
[INFO] [stdout] 2 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `socketio::*`
[INFO] [stdout]  --> src/agent/api/mod.rs:3:9
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use socketio::*;
[INFO] [stdout]   |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `adb_client::server_device::ADBServerDevice`
[INFO] [stdout]   --> src/agent/pool/device_pool.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use adb_client::server_device::ADBServerDevice;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::RwLock`
[INFO] [stdout]  --> src/agent/llm/autoglm_client.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::RwLock;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `device_entry::DeviceEntry`
[INFO] [stdout]   --> src/agent/pool/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use device_entry::DeviceEntry;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DevicePoolError`
[INFO] [stdout]   --> src/agent/pool/mod.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     DevicePoolError,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/agent/logger.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Action`, `AgentError`, `AgentGroupConfig`, `AgentGroupEvent`, `AgentGroup`, `AgentRuntime`, `AgentState`, `Agent`, `Device`, `ModelClient`, and `agent::PhoneAgent`
[INFO] [stdout]   --> src/agent/mod.rs:18:14
[INFO] [stdout]    |
[INFO] [stdout] 18 |     traits::{Device, Action, Agent, ModelClient, AgentError},
[INFO] [stdout]    |              ^^^^^^  ^^^^^^  ^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 19 |     state::{AgentConfig, AgentState, AgentRuntime},
[INFO] [stdout]    |                          ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 20 |     agent::PhoneAgent,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     agent_group::{AgentGroup, AgentGroupConfig, AgentGroupEvent},
[INFO] [stdout]    |                   ^^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActionEnum`, `BackAction`, `DoubleTapAction`, `FinishAction`, `HomeAction`, `LaunchAction`, `LongPressAction`, `NotificationAction`, `PressKeyAction`, `RecentAction`, `ScreenshotAction`, `ScrollAction`, `SwipeAction`, `TapAction`, `TypeAction`, and `WaitAction`
[INFO] [stdout]   --> src/agent/mod.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     ActionEnum, TapAction, LongPressAction, DoubleTapAction, SwipeAction, ScrollAction,
[INFO] [stdout]    |     ^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 26 |     TypeAction, PressKeyAction, BackAction, HomeAction, RecentAction, NotificationAction,
[INFO] [stdout]    |     ^^^^^^^^^^  ^^^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     LaunchAction, WaitAction, ScreenshotAction, FinishAction,
[INFO] [stdout]    |     ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `create_model_client`
[INFO] [stdout]   --> src/agent/mod.rs:29:28
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub use llm::{ModelConfig, create_model_client};
[INFO] [stdout]    |                            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActionHandler` and `ScrcpyDeviceWrapper`
[INFO] [stdout]   --> src/agent/mod.rs:30:20
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub use executor::{ScrcpyDeviceWrapper, ActionHandler};
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ConversationContext` and `ShortTermMemory`
[INFO] [stdout]   --> src/agent/mod.rs:31:19
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub use context::{ConversationContext, ShortTermMemory};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FullAgentConfig`
[INFO] [stdout]   --> src/agent/mod.rs:32:18
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub use config::{FullAgentConfig};
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DevicePoolEvent` and `DeviceStatus`
[INFO] [stdout]   --> src/agent/mod.rs:33:46
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub use pool::{DevicePool, DevicePoolConfig, DevicePoolEvent, DeviceStatus};
[INFO] [stdout]    |                                              ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `client::*`
[INFO] [stdout]  --> src/agent/llm/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use client::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `parser::*`
[INFO] [stdout]   --> src/agent/llm/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use parser::*;
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `autoglm_client::*`
[INFO] [stdout]   --> src/agent/llm/mod.rs:12:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub use autoglm_client::*;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prompts::*`
[INFO] [stdout]   --> src/agent/llm/mod.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use prompts::*;
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error` and `warn`
[INFO] [stdout]  --> src/agent/executor/device_wrapper.rs:8:28
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, info, error, warn};
[INFO] [stdout]   |                            ^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]    --> src/agent/executor/device_wrapper.rs:579:36
[INFO] [stdout]     |
[INFO] [stdout] 579 |         use tracing::{info, debug, warn, error};
[INFO] [stdout]     |                                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::agent::core::traits::ParsedAction`
[INFO] [stdout]  --> src/agent/executor/handler.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::agent::core::traits::ParsedAction;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]  --> src/agent/executor/handler.rs:6:34
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::{debug, info, warn, error};
[INFO] [stdout]   |                                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::agent::actions::TapAction`
[INFO] [stdout]    --> src/agent/executor/handler.rs:261:9
[INFO] [stdout]     |
[INFO] [stdout] 261 |     use crate::agent::actions::TapAction;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::agent::core::traits::ParsedAction`
[INFO] [stdout]    --> src/agent/executor/handler.rs:262:9
[INFO] [stdout]     |
[INFO] [stdout] 262 |     use crate::agent::core::traits::ParsedAction;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `retry::*`
[INFO] [stdout]  --> src/agent/executor/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use retry::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `socketio::*`
[INFO] [stdout]  --> src/agent/api/mod.rs:3:9
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub use socketio::*;
[INFO] [stdout]   |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `adb_client::server_device::ADBServerDevice`
[INFO] [stdout]   --> src/agent/pool/device_pool.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use adb_client::server_device::ADBServerDevice;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `device_entry::DeviceEntry`
[INFO] [stdout]   --> src/agent/pool/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use device_entry::DeviceEntry;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DevicePoolError`
[INFO] [stdout]   --> src/agent/pool/mod.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     DevicePoolError,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/agent/logger.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Action`, `AgentError`, `AgentGroupConfig`, `AgentGroupEvent`, `AgentGroup`, `AgentRuntime`, `AgentState`, `Agent`, `Device`, `ModelClient`, and `agent::PhoneAgent`
[INFO] [stdout]   --> src/agent/mod.rs:18:14
[INFO] [stdout]    |
[INFO] [stdout] 18 |     traits::{Device, Action, Agent, ModelClient, AgentError},
[INFO] [stdout]    |              ^^^^^^  ^^^^^^  ^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 19 |     state::{AgentConfig, AgentState, AgentRuntime},
[INFO] [stdout]    |                          ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 20 |     agent::PhoneAgent,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     agent_group::{AgentGroup, AgentGroupConfig, AgentGroupEvent},
[INFO] [stdout]    |                   ^^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActionEnum`, `BackAction`, `DoubleTapAction`, `FinishAction`, `HomeAction`, `LaunchAction`, `LongPressAction`, `NotificationAction`, `PressKeyAction`, `RecentAction`, `ScreenshotAction`, `ScrollAction`, `SwipeAction`, `TapAction`, `TypeAction`, and `WaitAction`
[INFO] [stdout]   --> src/agent/mod.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     ActionEnum, TapAction, LongPressAction, DoubleTapAction, SwipeAction, ScrollAction,
[INFO] [stdout]    |     ^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 26 |     TypeAction, PressKeyAction, BackAction, HomeAction, RecentAction, NotificationAction,
[INFO] [stdout]    |     ^^^^^^^^^^  ^^^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     LaunchAction, WaitAction, ScreenshotAction, FinishAction,
[INFO] [stdout]    |     ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `create_model_client`
[INFO] [stdout]   --> src/agent/mod.rs:29:28
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub use llm::{ModelConfig, create_model_client};
[INFO] [stdout]    |                            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActionHandler` and `ScrcpyDeviceWrapper`
[INFO] [stdout]   --> src/agent/mod.rs:30:20
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub use executor::{ScrcpyDeviceWrapper, ActionHandler};
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ConversationContext` and `ShortTermMemory`
[INFO] [stdout]   --> src/agent/mod.rs:31:19
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub use context::{ConversationContext, ShortTermMemory};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FullAgentConfig`
[INFO] [stdout]   --> src/agent/mod.rs:32:18
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub use config::{FullAgentConfig};
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DevicePoolEvent` and `DeviceStatus`
[INFO] [stdout]   --> src/agent/mod.rs:33:46
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub use pool::{DevicePool, DevicePoolConfig, DevicePoolEvent, DeviceStatus};
[INFO] [stdout]    |                                              ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `screenshot_duration`
[INFO] [stdout]    --> src/agent/core/agent.rs:182:17
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let screenshot_duration = screenshot_start.elapsed();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_screenshot_duration`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `messages_for_log`
[INFO] [stdout]    --> src/agent/core/agent.rs:189:17
[INFO] [stdout]     |
[INFO] [stdout] 189 |             let messages_for_log = current_messages.clone();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_messages_for_log`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `query_duration`
[INFO] [stdout]    --> src/agent/core/agent.rs:205:17
[INFO] [stdout]     |
[INFO] [stdout] 205 |             let query_duration = query_start.elapsed();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_query_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `finish_action`
[INFO] [stdout]    --> src/agent/core/agent.rs:228:25
[INFO] [stdout]     |
[INFO] [stdout] 228 |             if let Some(finish_action) = parsed_actions.iter().find(|a| a.action_type() == "finish") {
[INFO] [stdout]     |                         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_finish_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `distance_y`
[INFO] [stdout]    --> src/agent/actions/swipe.rs:117:13
[INFO] [stdout]     |
[INFO] [stdout] 117 |         let distance_y = (height * self.distance_pct / 100) as u32;
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_distance_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `distance_x`
[INFO] [stdout]    --> src/agent/actions/swipe.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 118 |         let distance_x = (width * self.distance_pct / 100) as u32;
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_distance_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/agent/actions/system.rs:228:29
[INFO] [stdout]     |
[INFO] [stdout] 228 |     async fn execute(&self, device: &dyn Device) -> Result<ActionResult, AppError> {
[INFO] [stdout]     |                             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `screenshot_duration`
[INFO] [stdout]    --> src/agent/core/agent.rs:182:17
[INFO] [stdout]     |
[INFO] [stdout] 182 |             let screenshot_duration = screenshot_start.elapsed();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_screenshot_duration`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `messages_for_log`
[INFO] [stdout]    --> src/agent/core/agent.rs:189:17
[INFO] [stdout]     |
[INFO] [stdout] 189 |             let messages_for_log = current_messages.clone();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_messages_for_log`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `query_duration`
[INFO] [stdout]    --> src/agent/core/agent.rs:205:17
[INFO] [stdout]     |
[INFO] [stdout] 205 |             let query_duration = query_start.elapsed();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_query_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `finish_action`
[INFO] [stdout]    --> src/agent/core/agent.rs:228:25
[INFO] [stdout]     |
[INFO] [stdout] 228 |             if let Some(finish_action) = parsed_actions.iter().find(|a| a.action_type() == "finish") {
[INFO] [stdout]     |                         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_finish_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `task`
[INFO] [stdout]    --> src/agent/core/agent.rs:432:21
[INFO] [stdout]     |
[INFO] [stdout] 432 |                 let task = self.runtime.current_task.read().await.clone().unwrap_or_default();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_task`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `distance_y`
[INFO] [stdout]    --> src/agent/actions/swipe.rs:117:13
[INFO] [stdout]     |
[INFO] [stdout] 117 |         let distance_y = (height * self.distance_pct / 100) as u32;
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_distance_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `distance_x`
[INFO] [stdout]    --> src/agent/actions/swipe.rs:118:13
[INFO] [stdout]     |
[INFO] [stdout] 118 |         let distance_x = (width * self.distance_pct / 100) as u32;
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_distance_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device`
[INFO] [stdout]    --> src/agent/actions/system.rs:228:29
[INFO] [stdout]     |
[INFO] [stdout] 228 |     async fn execute(&self, device: &dyn Device) -> Result<ActionResult, AppError> {
[INFO] [stdout]     |                             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_device`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `task`
[INFO] [stdout]    --> src/agent/core/agent.rs:432:21
[INFO] [stdout]     |
[INFO] [stdout] 432 |                 let task = self.runtime.current_task.read().await.clone().unwrap_or_default();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_task`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `thinking`
[INFO] [stdout]    --> src/agent/llm/autoglm_client.rs:562:14
[INFO] [stdout]     |
[INFO] [stdout] 562 |         let (thinking, parsed_actions) = self.parse_response(&content);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_thinking`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `thinking`
[INFO] [stdout]    --> src/agent/llm/autoglm_client.rs:562:14
[INFO] [stdout]     |
[INFO] [stdout] 562 |         let (thinking, parsed_actions) = self.parse_response(&content);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_thinking`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `step_number`
[INFO] [stdout]   --> src/agent/logger.rs:92:35
[INFO] [stdout]    |
[INFO] [stdout] 92 |     pub fn save_screenshot(&self, step_number: usize, screenshot_base64: &str) -> Result<String, std::io::Error> {
[INFO] [stdout]    |                                   ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_step_number`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_agent_group` and `get_device_pool` are never used
[INFO] [stdout]   --> src/context/context.rs:54:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub trait IContext: Send + Sync {
[INFO] [stdout]    |           -------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 54 |     fn get_agent_group(&self) -> &RwLock<Option<Arc<AgentGroup>>>;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 55 |     fn get_device_pool(&self) -> &RwLock<Option<Arc<DevicePool>>>;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `agent_group` is never read
[INFO] [stdout]   --> src/context/context.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct Context {
[INFO] [stdout]    |            ------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 62 |     agent_group: RwLock<Option<Arc<AgentGroup>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_agent_group` is never used
[INFO] [stdout]   --> src/context/context.rs:78:18
[INFO] [stdout]    |
[INFO] [stdout] 66 | impl Context {
[INFO] [stdout]    | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub async fn set_agent_group(&self, group: Arc<AgentGroup>) {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `serial`, `name`, `is_connected`, and `current_app` are never used
[INFO] [stdout]   --> src/agent/core/traits.rs:8:8
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub trait Device: Send + Sync {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout]  7 |     /// 获取设备序列号
[INFO] [stdout]  8 |     fn serial(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 11 |     fn name(&self) -> &str;
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     async fn is_connected(&self) -> bool;
[INFO] [stdout]    |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     async fn current_app(&self) -> Result<String, AppError>;
[INFO] [stdout]    |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_reversible` and `estimated_duration` are never used
[INFO] [stdout]   --> src/agent/core/traits.rs:81:8
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub trait Action: Send + Sync + std::fmt::Debug {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 81 |     fn is_reversible(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     fn estimated_duration(&self) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `InvalidText` is never constructed
[INFO] [stdout]    --> src/agent/core/traits.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub enum ActionError {
[INFO] [stdout]     |          ----------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 133 |     InvalidText(String),
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ActionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]    --> src/agent/core/traits.rs:146:5
[INFO] [stdout]     |
[INFO] [stdout] 144 | pub enum AgentError {
[INFO] [stdout]     |          ---------- variants in this enum
[INFO] [stdout] 145 |     #[error("Agent 未找到: {0}")]
[INFO] [stdout] 146 |     NotFound(String),
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     TimeoutError(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     NotRunning,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     MaxStepsExceeded(usize),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     ExecutionTimeout(u64),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     TaskFailed(String),
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     InvalidStateTransition(String, String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     RecoveryFailed(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `AgentError` 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 `pause`, `resume`, `history`, and `feedback` are never used
[INFO] [stdout]    --> src/agent/core/traits.rs:192:14
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub trait Agent: Send + Sync {
[INFO] [stdout]     |           ----- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 192 |     async fn pause(&self) -> Result<(), AppError>;
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     async fn resume(&self) -> Result<(), AppError>;
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     async fn history(&self) -> Vec<ExecutionStep>;
[INFO] [stdout]     |              ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     async fn feedback(&self, feedback: AgentFeedback) -> Result<(), AppError>;
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AgentFeedback` is never used
[INFO] [stdout]    --> src/agent/core/traits.rs:235:10
[INFO] [stdout]     |
[INFO] [stdout] 235 | pub enum AgentFeedback {
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `info` is never used
[INFO] [stdout]    --> src/agent/core/traits.rs:260:8
[INFO] [stdout]     |
[INFO] [stdout] 243 | pub trait ModelClient: Send + Sync {
[INFO] [stdout]     |           ----------- method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 260 |     fn info(&self) -> ModelInfo;
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `confidence` and `tokens_used` are never read
[INFO] [stdout]    --> src/agent/core/traits.rs:284:9
[INFO] [stdout]     |
[INFO] [stdout] 281 | pub struct ModelResponse {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub confidence: f32,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 285 |     pub reasoning: Option<String>,
[INFO] [stdout] 286 |     pub tokens_used: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ModelResponse` 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: variant `Timeout` is never constructed
[INFO] [stdout]    --> src/agent/core/traits.rs:316:5
[INFO] [stdout]     |
[INFO] [stdout] 299 | pub enum ModelError {
[INFO] [stdout]     |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 316 |     Timeout,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ModelError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ModelInfo` is never constructed
[INFO] [stdout]    --> src/agent/core/traits.rs:321:12
[INFO] [stdout]     |
[INFO] [stdout] 321 | pub struct ModelInfo {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `AgentCreated`, `AgentStarted`, `AgentCompleted`, `AgentFailed`, `AgentStopped`, and `Custom` are never constructed
[INFO] [stdout]   --> src/agent/core/agent_group.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum AgentGroupEvent {
[INFO] [stdout]    |          --------------- variants in this enum
[INFO] [stdout] 16 |     /// Agent 创建
[INFO] [stdout] 17 |     AgentCreated { agent_id: String, device_serial: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     AgentStarted { agent_id: String, task: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     AgentCompleted { agent_id: String, result: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     AgentFailed { agent_id: String, error: String },
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     AgentStopped { agent_id: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     Custom { agent_id: String, event_type: String, data: String },
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AgentGroupEvent` 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 `max_concurrent_agents`, `task_queue_size`, and `enable_event_broadcast` are never read
[INFO] [stdout]   --> src/agent/core/agent_group.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct AgentGroupConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 38 |     /// 最大并发 Agent 数量
[INFO] [stdout] 39 |     pub max_concurrent_agents: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub task_queue_size: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub enable_event_broadcast: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AgentGroupConfig` 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 `devices`, `event_tx`, `config`, and `model_config` are never read
[INFO] [stdout]   --> src/agent/core/agent_group.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct AgentGroup {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 62 |     devices: RwLock<HashMap<String, Arc<dyn Device>>>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 63 |     event_tx: broadcast::Sender<AgentGroupEvent>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 64 |     config: AgentGroupConfig,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 65 |     model_config: ModelConfig,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/agent/core/agent_group.rs:89:18
[INFO] [stdout]     |
[INFO] [stdout]  68 | impl AgentGroup {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub async fn register_device(&self, device: Arc<dyn Device>) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub async fn unregister_device(&self, serial: &str) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub async fn get_devices(&self) -> Vec<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub async fn create_agent(
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub async fn get_agent(&self, agent_id: &str) -> Option<Arc<PhoneAgent>> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub async fn start_agent(&self, agent_id: &str, task: String) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub async fn stop_agent(&self, agent_id: &str) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub async fn remove_agent(&self, agent_id: &str) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub async fn list_agents(&self) -> Vec<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub async fn broadcast_task(&self, task: String) -> Result<Vec<String>, AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub fn subscribe_events(&self) -> broadcast::Receiver<AgentGroupEvent> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_json` is never used
[INFO] [stdout]    --> src/agent/actions/base.rs:501:12
[INFO] [stdout]     |
[INFO] [stdout] 499 | impl ActionEnum {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 500 |     /// 从 JSON 创建 ActionEnum
[INFO] [stdout] 501 |     pub fn from_json(action_type: &str, params: serde_json::Value) -> Result<Self, serde_json::Error> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_app_name` is never used
[INFO] [stdout]    --> src/agent/actions/system.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 105 | impl LaunchAction {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 106 |     /// 从应用名称创建 LaunchAction
[INFO] [stdout] 107 |     pub fn from_app_name(app_name: &str) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `from_env` and `azure` are never used
[INFO] [stdout]    --> src/agent/llm/types.rs:158:12
[INFO] [stdout]     |
[INFO] [stdout] 156 | impl ModelConfig {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] 157 |     /// 从环境变量加载配置
[INFO] [stdout] 158 |     pub fn from_env() -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn azure(
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_text_after` is never used
[INFO] [stdout]    --> src/agent/llm/parser.rs:462:4
[INFO] [stdout]     |
[INFO] [stdout] 462 | fn extract_text_after(text: &str, keywords: &[&str]) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StreamEvent` is never used
[INFO] [stdout]   --> src/agent/llm/autoglm_client.rs:20:6
[INFO] [stdout]    |
[INFO] [stdout] 20 | enum StreamEvent {
[INFO] [stdout]    |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PerformanceMetrics` is never constructed
[INFO] [stdout]   --> src/agent/llm/autoglm_client.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct PerformanceMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `send_stream_request` is never used
[INFO] [stdout]    --> src/agent/llm/autoglm_client.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout]  50 | impl AutoGLMClient {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 117 |     async fn send_stream_request(&self, request: ChatRequest) -> Result<String, ModelError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `scrcpy_connect`, and `adb_device` are never read
[INFO] [stdout]   --> src/agent/executor/device_wrapper.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ScrcpyDeviceWrapper {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 13 |     serial: String,
[INFO] [stdout] 14 |     name: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 15 |     scrcpy_connect: Arc<ScrcpyConnect>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     adb_device: Arc<ADBServerDevice>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parse_screen_size` is never used
[INFO] [stdout]    --> src/agent/executor/device_wrapper.rs:141:8
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl ScrcpyDeviceWrapper {
[INFO] [stdout]     | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 141 |     fn parse_screen_size(&self, output: &str) -> Result<(u32, u32), AppError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `with_max_retries`, `with_retry_delay`, and `execute_parsed_action` are never used
[INFO] [stdout]   --> src/agent/executor/handler.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl ActionHandler {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn with_max_retries(mut self, max_retries: u32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn with_retry_delay(mut self, delay_ms: u64) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 97 |     pub async fn execute_parsed_action(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `None` is never constructed
[INFO] [stdout]   --> src/agent/executor/retry.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub enum RetryStrategy {
[INFO] [stdout]    |          ------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 21 |     None,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RetryStrategy` 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 items `new` and `with_retryable_errors` are never used
[INFO] [stdout]    --> src/agent/executor/retry.rs:93:12
[INFO] [stdout]     |
[INFO] [stdout]  91 | impl RetryConfig {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  92 |     /// 创建新的重试配置
[INFO] [stdout]  93 |     pub fn new(max_attempts: u32, strategy: RetryStrategy) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn with_retryable_errors(mut self, errors: Vec<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_messages`, `get_recent_messages`, `clear`, `len`, and `build_prompt` are never used
[INFO] [stdout]   --> src/agent/context/conversation.rs:63:18
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl ConversationContext {
[INFO] [stdout]    | ------------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub async fn get_messages(&self) -> Vec<ConversationMessage> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub async fn get_recent_messages(&self, n: usize) -> Vec<ConversationMessage> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub async fn clear(&self) {
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub async fn len(&self) -> usize {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub async fn build_prompt(&self, task: &str) -> String {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_with_ttl`, `remove`, `clear`, `cleanup_expired`, and `get_all` are never used
[INFO] [stdout]    --> src/agent/context/memory.rs:58:18
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl ShortTermMemory {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub async fn set_with_ttl(&self, key: String, value: String, ttl_seconds: u64) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub async fn remove(&self, key: &str) {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub async fn clear(&self) {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub async fn cleanup_expired(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub async fn get_all(&self) -> HashMap<String, String> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_file`, `from_file_with_env`, `save_to_file`, `default_config`, and `with_local_model` are never used
[INFO] [stdout]   --> src/agent/config/agent_config.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl FullAgentConfig {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 24 |     /// 从 TOML 文件加载配置
[INFO] [stdout] 25 |     pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self, ConfigError> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn from_file_with_env<P: AsRef<Path>>(path: P) -> Result<Self, ConfigError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn save_to_file<P: AsRef<Path>>(&self, path: P) -> Result<(), ConfigError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn default_config() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn with_local_model(base_url: String, model_name: String) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConfigError` is never used
[INFO] [stdout]   --> src/agent/config/agent_config.rs:78:10
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub enum ConfigError {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register_agent_handlers` is never used
[INFO] [stdout]  --> src/agent/api/socketio.rs:8:14
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub async fn register_agent_handlers(socket: SocketRef, context: Arc<dyn IContext>) {
[INFO] [stdout]   |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_agent_start_with_pool` is never used
[INFO] [stdout]   --> src/agent/api/socketio.rs:70:10
[INFO] [stdout]    |
[INFO] [stdout] 70 | async fn handle_agent_start_with_pool(request: AgentStartRequest, pool: Arc<crate::agent::pool::DevicePool>) -> Result<serde_json::V...
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_get_devices_with_pool` is never used
[INFO] [stdout]   --> src/agent/api/socketio.rs:79:10
[INFO] [stdout]    |
[INFO] [stdout] 79 | async fn handle_get_devices_with_pool(pool: Arc<crate::agent::pool::DevicePool>) -> Result<serde_json::Value, crate::error::AppError> {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AgentStartRequest` is never constructed
[INFO] [stdout]   --> src/agent/api/socketio.rs:85:12
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub struct AgentStartRequest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/agent/pool/device_pool.rs:65:12
[INFO] [stdout]     |
[INFO] [stdout]  44 | impl DevicePool {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn subscribe_events(&self) -> broadcast::Receiver<DevicePoolEvent> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub async fn unregister_device(&self, serial: &str) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub async fn disconnect_device(&self, serial: &str) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     pub async fn get_all_devices_status(&self) -> Vec<(String, DeviceStatus)> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub async fn list_devices(&self) -> Vec<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub async fn get_device_info(&self, serial: &str) -> Option<crate::agent::pool::types::DeviceInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 342 |     pub async fn cleanup_idle_devices(&self) -> Result<usize, AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 374 |     pub async fn health_check(&self) -> Result<HashMap<String, bool>, AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 421 |     pub async fn mark_task_completed(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 449 |     pub async fn mark_task_failed(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `created_at` is never read
[INFO] [stdout]   --> src/agent/pool/device_entry.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct DeviceEntry {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub created_at: DateTime<Utc>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_idle`, `is_connected`, and `is_busy` are never used
[INFO] [stdout]   --> src/agent/pool/device_entry.rs:71:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl DeviceEntry {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn is_idle(&self, threshold_seconds: i64) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn is_busy(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `serial` is never read
[INFO] [stdout]   --> src/agent/pool/types.rs:74:24
[INFO] [stdout]    |
[INFO] [stdout] 74 |     DeviceRegistered { serial: String },
[INFO] [stdout]    |     ----------------   ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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 `serial` is never read
[INFO] [stdout]   --> src/agent/pool/types.rs:77:23
[INFO] [stdout]    |
[INFO] [stdout] 77 |     DeviceConnected { serial: String },
[INFO] [stdout]    |     ---------------   ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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 `serial` and `agent_id` are never read
[INFO] [stdout]   --> src/agent/pool/types.rs:83:20
[INFO] [stdout]    |
[INFO] [stdout] 83 |     AgentCreated { serial: String, agent_id: String },
[INFO] [stdout]    |     ------------   ^^^^^^          ^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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 `serial` and `agent_id` are never read
[INFO] [stdout]   --> src/agent/pool/types.rs:86:22
[INFO] [stdout]    |
[INFO] [stdout] 86 |     AgentDestroyed { serial: String, agent_id: String },
[INFO] [stdout]    |     --------------   ^^^^^^          ^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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 `serial` and `task` are never read
[INFO] [stdout]   --> src/agent/pool/types.rs:92:19
[INFO] [stdout]    |
[INFO] [stdout] 92 |     TaskStarted { serial: String, task: String },
[INFO] [stdout]    |     -----------   ^^^^^^          ^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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: variants `DeviceDisconnected`, `DeviceIdle`, `TaskCompleted`, `TaskFailed`, and `Error` are never constructed
[INFO] [stdout]    --> src/agent/pool/types.rs:80:5
[INFO] [stdout]     |
[INFO] [stdout]  72 | pub enum DevicePoolEvent {
[INFO] [stdout]     |          --------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout]  80 |     DeviceDisconnected { serial: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     DeviceIdle { serial: String, idle_seconds: u64 },
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     TaskCompleted { serial: String, result: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     TaskFailed { serial: String, error: String },
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     Error { serial: String, error: String },
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `DevicePoolEvent` 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: enum `DevicePoolError` is never used
[INFO] [stdout]    --> src/agent/pool/types.rs:106:10
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub enum DevicePoolError {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `io` is never read
[INFO] [stdout]   --> src/agent/socket_server.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct AgentSocketServer {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] 20 |     io: Arc<SocketIo>,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `io` and `port` are never used
[INFO] [stdout]   --> src/agent/socket_server.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl AgentSocketServer {
[INFO] [stdout]    | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn io(&self) -> &Arc<SocketIo> {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn port(&self) -> u16 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `step_number`
[INFO] [stdout]   --> src/agent/logger.rs:92:35
[INFO] [stdout]    |
[INFO] [stdout] 92 |     pub fn save_screenshot(&self, step_number: usize, screenshot_base64: &str) -> Result<String, std::io::Error> {
[INFO] [stdout]    |                                   ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_step_number`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_agent_group` and `get_device_pool` are never used
[INFO] [stdout]   --> src/context/context.rs:54:8
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub trait IContext: Send + Sync {
[INFO] [stdout]    |           -------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 54 |     fn get_agent_group(&self) -> &RwLock<Option<Arc<AgentGroup>>>;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 55 |     fn get_device_pool(&self) -> &RwLock<Option<Arc<DevicePool>>>;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `agent_group` is never read
[INFO] [stdout]   --> src/context/context.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct Context {
[INFO] [stdout]    |            ------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 62 |     agent_group: RwLock<Option<Arc<AgentGroup>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_agent_group` is never used
[INFO] [stdout]   --> src/context/context.rs:78:18
[INFO] [stdout]    |
[INFO] [stdout] 66 | impl Context {
[INFO] [stdout]    | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub async fn set_agent_group(&self, group: Arc<AgentGroup>) {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `serial`, `name`, `is_connected`, and `current_app` are never used
[INFO] [stdout]   --> src/agent/core/traits.rs:8:8
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub trait Device: Send + Sync {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout]  7 |     /// 获取设备序列号
[INFO] [stdout]  8 |     fn serial(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 11 |     fn name(&self) -> &str;
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 14 |     async fn is_connected(&self) -> bool;
[INFO] [stdout]    |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     async fn current_app(&self) -> Result<String, AppError>;
[INFO] [stdout]    |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_reversible` and `estimated_duration` are never used
[INFO] [stdout]   --> src/agent/core/traits.rs:81:8
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub trait Action: Send + Sync + std::fmt::Debug {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 81 |     fn is_reversible(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     fn estimated_duration(&self) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `InvalidText` is never constructed
[INFO] [stdout]    --> src/agent/core/traits.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub enum ActionError {
[INFO] [stdout]     |          ----------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 133 |     InvalidText(String),
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ActionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]    --> src/agent/core/traits.rs:146:5
[INFO] [stdout]     |
[INFO] [stdout] 144 | pub enum AgentError {
[INFO] [stdout]     |          ---------- variants in this enum
[INFO] [stdout] 145 |     #[error("Agent 未找到: {0}")]
[INFO] [stdout] 146 |     NotFound(String),
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     TimeoutError(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     NotRunning,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     MaxStepsExceeded(usize),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     ExecutionTimeout(u64),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     TaskFailed(String),
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     InvalidStateTransition(String, String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     RecoveryFailed(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `AgentError` 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 `pause`, `resume`, `status`, `history`, and `feedback` are never used
[INFO] [stdout]    --> src/agent/core/traits.rs:192:14
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub trait Agent: Send + Sync {
[INFO] [stdout]     |           ----- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 192 |     async fn pause(&self) -> Result<(), AppError>;
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     async fn resume(&self) -> Result<(), AppError>;
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     async fn status(&self) -> AgentStatus;
[INFO] [stdout]     |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     async fn history(&self) -> Vec<ExecutionStep>;
[INFO] [stdout]     |              ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     async fn feedback(&self, feedback: AgentFeedback) -> Result<(), AppError>;
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AgentStatus` is never used
[INFO] [stdout]    --> src/agent/core/traits.rs:209:10
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub enum AgentStatus {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AgentFeedback` is never used
[INFO] [stdout]    --> src/agent/core/traits.rs:235:10
[INFO] [stdout]     |
[INFO] [stdout] 235 | pub enum AgentFeedback {
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `info` is never used
[INFO] [stdout]    --> src/agent/core/traits.rs:260:8
[INFO] [stdout]     |
[INFO] [stdout] 243 | pub trait ModelClient: Send + Sync {
[INFO] [stdout]     |           ----------- method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 260 |     fn info(&self) -> ModelInfo;
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `confidence` and `tokens_used` are never read
[INFO] [stdout]    --> src/agent/core/traits.rs:284:9
[INFO] [stdout]     |
[INFO] [stdout] 281 | pub struct ModelResponse {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub confidence: f32,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 285 |     pub reasoning: Option<String>,
[INFO] [stdout] 286 |     pub tokens_used: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ModelResponse` 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: variant `Timeout` is never constructed
[INFO] [stdout]    --> src/agent/core/traits.rs:316:5
[INFO] [stdout]     |
[INFO] [stdout] 299 | pub enum ModelError {
[INFO] [stdout]     |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 316 |     Timeout,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ModelError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ModelInfo` is never constructed
[INFO] [stdout]    --> src/agent/core/traits.rs:321:12
[INFO] [stdout]     |
[INFO] [stdout] 321 | pub struct ModelInfo {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `AgentCreated`, `AgentStarted`, `AgentCompleted`, `AgentFailed`, `AgentStopped`, and `Custom` are never constructed
[INFO] [stdout]   --> src/agent/core/agent_group.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum AgentGroupEvent {
[INFO] [stdout]    |          --------------- variants in this enum
[INFO] [stdout] 16 |     /// Agent 创建
[INFO] [stdout] 17 |     AgentCreated { agent_id: String, device_serial: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     AgentStarted { agent_id: String, task: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     AgentCompleted { agent_id: String, result: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     AgentFailed { agent_id: String, error: String },
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     AgentStopped { agent_id: String },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     Custom { agent_id: String, event_type: String, data: String },
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AgentGroupEvent` 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 `max_concurrent_agents`, `task_queue_size`, and `enable_event_broadcast` are never read
[INFO] [stdout]   --> src/agent/core/agent_group.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct AgentGroupConfig {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 38 |     /// 最大并发 Agent 数量
[INFO] [stdout] 39 |     pub max_concurrent_agents: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub task_queue_size: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub enable_event_broadcast: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AgentGroupConfig` 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 `id`, `agents`, `devices`, `event_tx`, `config`, and `model_config` are never read
[INFO] [stdout]   --> src/agent/core/agent_group.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct AgentGroup {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 60 |     id: String,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 61 |     agents: RwLock<HashMap<String, Arc<PhoneAgent>>>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 62 |     devices: RwLock<HashMap<String, Arc<dyn Device>>>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 63 |     event_tx: broadcast::Sender<AgentGroupEvent>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 64 |     config: AgentGroupConfig,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 65 |     model_config: ModelConfig,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/agent/core/agent_group.rs:70:12
[INFO] [stdout]     |
[INFO] [stdout]  68 | impl AgentGroup {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  69 |     /// 创建新的 Agent 组
[INFO] [stdout]  70 |     pub fn new(config: AgentGroupConfig, model_config: ModelConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub fn id(&self) -> &str {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub async fn register_device(&self, device: Arc<dyn Device>) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub async fn unregister_device(&self, serial: &str) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub async fn get_devices(&self) -> Vec<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub async fn create_agent(
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub async fn get_agent(&self, agent_id: &str) -> Option<Arc<PhoneAgent>> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub async fn start_agent(&self, agent_id: &str, task: String) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub async fn stop_agent(&self, agent_id: &str) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub async fn remove_agent(&self, agent_id: &str) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub async fn list_agents(&self) -> Vec<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub async fn active_agent_count(&self) -> usize {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub async fn broadcast_task(&self, task: String) -> Result<Vec<String>, AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub fn subscribe_events(&self) -> broadcast::Receiver<AgentGroupEvent> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_json` is never used
[INFO] [stdout]    --> src/agent/actions/base.rs:501:12
[INFO] [stdout]     |
[INFO] [stdout] 499 | impl ActionEnum {
[INFO] [stdout]     | --------------- associated function in this implementation
[INFO] [stdout] 500 |     /// 从 JSON 创建 ActionEnum
[INFO] [stdout] 501 |     pub fn from_json(action_type: &str, params: serde_json::Value) -> Result<Self, serde_json::Error> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_app_name` is never used
[INFO] [stdout]    --> src/agent/actions/system.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 105 | impl LaunchAction {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 106 |     /// 从应用名称创建 LaunchAction
[INFO] [stdout] 107 |     pub fn from_app_name(app_name: &str) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `from_env`, `local`, and `azure` are never used
[INFO] [stdout]    --> src/agent/llm/types.rs:158:12
[INFO] [stdout]     |
[INFO] [stdout] 156 | impl ModelConfig {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] 157 |     /// 从环境变量加载配置
[INFO] [stdout] 158 |     pub fn from_env() -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub fn local(base_url: String, model_name: String) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn azure(
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_coordinates` is never used
[INFO] [stdout]    --> src/agent/llm/parser.rs:426:4
[INFO] [stdout]     |
[INFO] [stdout] 426 | fn extract_coordinates(text: &str) -> Option<(u32, u32)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_launch_app` is never used
[INFO] [stdout]    --> src/agent/llm/parser.rs:438:4
[INFO] [stdout]     |
[INFO] [stdout] 438 | fn extract_launch_app(text: &str) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_text_after` is never used
[INFO] [stdout]    --> src/agent/llm/parser.rs:462:4
[INFO] [stdout]     |
[INFO] [stdout] 462 | fn extract_text_after(text: &str, keywords: &[&str]) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_duration` is never used
[INFO] [stdout]    --> src/agent/llm/parser.rs:483:4
[INFO] [stdout]     |
[INFO] [stdout] 483 | fn extract_duration(text: &str) -> Option<u32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_autoglm_client` is never used
[INFO] [stdout]   --> src/agent/llm/providers.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn create_autoglm_client(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StreamEvent` is never used
[INFO] [stdout]   --> src/agent/llm/autoglm_client.rs:20:6
[INFO] [stdout]    |
[INFO] [stdout] 20 | enum StreamEvent {
[INFO] [stdout]    |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PerformanceMetrics` is never constructed
[INFO] [stdout]   --> src/agent/llm/autoglm_client.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct PerformanceMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `send_stream_request` is never used
[INFO] [stdout]    --> src/agent/llm/autoglm_client.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout]  50 | impl AutoGLMClient {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 117 |     async fn send_stream_request(&self, request: ChatRequest) -> Result<String, ModelError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `scrcpy_connect`, and `adb_device` are never read
[INFO] [stdout]   --> src/agent/executor/device_wrapper.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ScrcpyDeviceWrapper {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 13 |     serial: String,
[INFO] [stdout] 14 |     name: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 15 |     scrcpy_connect: Arc<ScrcpyConnect>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     adb_device: Arc<ADBServerDevice>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parse_screen_size` is never used
[INFO] [stdout]    --> src/agent/executor/device_wrapper.rs:141:8
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl ScrcpyDeviceWrapper {
[INFO] [stdout]     | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 141 |     fn parse_screen_size(&self, output: &str) -> Result<(u32, u32), AppError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `with_max_retries`, `with_retry_delay`, `execute_parsed_action`, and `convert_action_params` are never used
[INFO] [stdout]    --> src/agent/executor/handler.rs:26:12
[INFO] [stdout]     |
[INFO] [stdout]  15 | impl ActionHandler {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  26 |     pub fn with_max_retries(mut self, max_retries: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  32 |     pub fn with_retry_delay(mut self, delay_ms: u64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub async fn execute_parsed_action(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     fn convert_action_params(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_uninitialized` is never used
[INFO] [stdout]    --> src/agent/executor/handler.rs:354:8
[INFO] [stdout]     |
[INFO] [stdout] 352 | impl ActionHandler {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] 353 |     /// 用于测试的构造函数（不需要 device）
[INFO] [stdout] 354 |     fn new_uninitialized() -> Self {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RetryStrategy` is never used
[INFO] [stdout]  --> src/agent/executor/retry.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum RetryStrategy {
[INFO] [stdout]   |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `next_delay`, `exponential`, and `fixed` are never used
[INFO] [stdout]   --> src/agent/executor/retry.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl RetryStrategy {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 35 |     /// 获取下一次重试的延迟时间
[INFO] [stdout] 36 |     pub fn next_delay(&self, attempt: u32) -> Option<Duration> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn exponential(initial_delay_ms: u64, max_delay_ms: u64, multiplier: f64) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn fixed(delay_ms: u64) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RetryConfig` is never constructed
[INFO] [stdout]   --> src/agent/executor/retry.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct RetryConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_retryable_errors`, `is_retryable`, and `execute` are never used
[INFO] [stdout]    --> src/agent/executor/retry.rs:93:12
[INFO] [stdout]     |
[INFO] [stdout]  91 | impl RetryConfig {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  92 |     /// 创建新的重试配置
[INFO] [stdout]  93 |     pub fn new(max_attempts: u32, strategy: RetryStrategy) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn with_retryable_errors(mut self, errors: Vec<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn is_retryable(&self, error_message: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub async fn execute<F, Fut, T, E>(&self, mut operation: F) -> Result<T, E>
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_messages`, `get_recent_messages`, `clear`, `len`, and `build_prompt` are never used
[INFO] [stdout]   --> src/agent/context/conversation.rs:63:18
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl ConversationContext {
[INFO] [stdout]    | ------------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub async fn get_messages(&self) -> Vec<ConversationMessage> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub async fn get_recent_messages(&self, n: usize) -> Vec<ConversationMessage> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub async fn clear(&self) {
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub async fn len(&self) -> usize {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub async fn build_prompt(&self, task: &str) -> String {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_expired` is never used
[INFO] [stdout]   --> src/agent/context/memory.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl MemoryEntry {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] 17 |     /// 检查是否过期
[INFO] [stdout] 18 |     pub fn is_expired(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `entries` and `default_ttl_seconds` are never read
[INFO] [stdout]   --> src/agent/context/memory.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct ShortTermMemory {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 29 |     entries: Arc<RwLock<HashMap<String, MemoryEntry>>>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 30 |     default_ttl_seconds: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/agent/context/memory.rs:43:18
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl ShortTermMemory {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub async fn set(&self, key: String, value: String) {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub async fn set_with_ttl(&self, key: String, value: String, ttl_seconds: u64) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub async fn get(&self, key: &str) -> Option<String> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub async fn remove(&self, key: &str) {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub async fn clear(&self) {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub async fn cleanup_expired(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub async fn get_all(&self) -> HashMap<String, String> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FullAgentConfig` is never constructed
[INFO] [stdout]  --> src/agent/config/agent_config.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct FullAgentConfig {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_file`, `from_file_with_env`, `save_to_file`, `default_config`, and `with_local_model` are never used
[INFO] [stdout]   --> src/agent/config/agent_config.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl FullAgentConfig {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 24 |     /// 从 TOML 文件加载配置
[INFO] [stdout] 25 |     pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self, ConfigError> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn from_file_with_env<P: AsRef<Path>>(path: P) -> Result<Self, ConfigError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn save_to_file<P: AsRef<Path>>(&self, path: P) -> Result<(), ConfigError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn default_config() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn with_local_model(base_url: String, model_name: String) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ConfigError` is never used
[INFO] [stdout]   --> src/agent/config/agent_config.rs:78:10
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub enum ConfigError {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register_agent_handlers` is never used
[INFO] [stdout]  --> src/agent/api/socketio.rs:8:14
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub async fn register_agent_handlers(socket: SocketRef, context: Arc<dyn IContext>) {
[INFO] [stdout]   |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_agent_start_with_pool` is never used
[INFO] [stdout]   --> src/agent/api/socketio.rs:70:10
[INFO] [stdout]    |
[INFO] [stdout] 70 | async fn handle_agent_start_with_pool(request: AgentStartRequest, pool: Arc<crate::agent::pool::DevicePool>) -> Result<serde_json::V...
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_get_devices_with_pool` is never used
[INFO] [stdout]   --> src/agent/api/socketio.rs:79:10
[INFO] [stdout]    |
[INFO] [stdout] 79 | async fn handle_get_devices_with_pool(pool: Arc<crate::agent::pool::DevicePool>) -> Result<serde_json::Value, crate::error::AppError> {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AgentStartRequest` is never constructed
[INFO] [stdout]   --> src/agent/api/socketio.rs:85:12
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub struct AgentStartRequest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/agent/pool/device_pool.rs:65:12
[INFO] [stdout]     |
[INFO] [stdout]  44 | impl DevicePool {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn subscribe_events(&self) -> broadcast::Receiver<DevicePoolEvent> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub async fn unregister_device(&self, serial: &str) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub async fn disconnect_device(&self, serial: &str) -> Result<(), AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     pub async fn get_all_devices_status(&self) -> Vec<(String, DeviceStatus)> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub async fn list_devices(&self) -> Vec<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub async fn get_device_info(&self, serial: &str) -> Option<crate::agent::pool::types::DeviceInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 342 |     pub async fn cleanup_idle_devices(&self) -> Result<usize, AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 374 |     pub async fn health_check(&self) -> Result<HashMap<String, bool>, AppError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 421 |     pub async fn mark_task_completed(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 449 |     pub async fn mark_task_failed(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `created_at` is never read
[INFO] [stdout]   --> src/agent/pool/device_entry.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct DeviceEntry {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub created_at: DateTime<Utc>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_idle`, `is_connected`, and `is_busy` are never used
[INFO] [stdout]   --> src/agent/pool/device_entry.rs:71:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl DeviceEntry {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn is_idle(&self, threshold_seconds: i64) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn is_busy(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `serial` is never read
[INFO] [stdout]   --> src/agent/pool/types.rs:74:24
[INFO] [stdout]    |
[INFO] [stdout] 74 |     DeviceRegistered { serial: String },
[INFO] [stdout]    |     ----------------   ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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 `serial` is never read
[INFO] [stdout]   --> src/agent/pool/types.rs:77:23
[INFO] [stdout]    |
[INFO] [stdout] 77 |     DeviceConnected { serial: String },
[INFO] [stdout]    |     ---------------   ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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 `serial` and `agent_id` are never read
[INFO] [stdout]   --> src/agent/pool/types.rs:83:20
[INFO] [stdout]    |
[INFO] [stdout] 83 |     AgentCreated { serial: String, agent_id: String },
[INFO] [stdout]    |     ------------   ^^^^^^          ^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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 `serial` and `agent_id` are never read
[INFO] [stdout]   --> src/agent/pool/types.rs:86:22
[INFO] [stdout]    |
[INFO] [stdout] 86 |     AgentDestroyed { serial: String, agent_id: String },
[INFO] [stdout]    |     --------------   ^^^^^^          ^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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 `serial` and `task` are never read
[INFO] [stdout]   --> src/agent/pool/types.rs:92:19
[INFO] [stdout]    |
[INFO] [stdout] 92 |     TaskStarted { serial: String, task: String },
[INFO] [stdout]    |     -----------   ^^^^^^          ^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DevicePoolEvent` 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: variants `DeviceDisconnected`, `DeviceIdle`, `TaskCompleted`, `TaskFailed`, and `Error` are never constructed
[INFO] [stdout]    --> src/agent/pool/types.rs:80:5
[INFO] [stdout]     |
[INFO] [stdout]  72 | pub enum DevicePoolEvent {
[INFO] [stdout]     |          --------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout]  80 |     DeviceDisconnected { serial: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     DeviceIdle { serial: String, idle_seconds: u64 },
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     TaskCompleted { serial: String, result: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     TaskFailed { serial: String, error: String },
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     Error { serial: String, error: String },
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `DevicePoolEvent` 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: enum `DevicePoolError` is never used
[INFO] [stdout]    --> src/agent/pool/types.rs:106:10
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub enum DevicePoolError {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `io` is never read
[INFO] [stdout]   --> src/agent/socket_server.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct AgentSocketServer {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] 20 |     io: Arc<SocketIo>,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `io` and `port` are never used
[INFO] [stdout]   --> src/agent/socket_server.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl AgentSocketServer {
[INFO] [stdout]    | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn io(&self) -> &Arc<SocketIo> {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn port(&self) -> u16 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 25s
[INFO] running `Command { std: "docker" "inspect" "4e9e15ec9e1c417d9a47405e7481d79203b3e0f580de1fa5a488d93dd3b56923", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4e9e15ec9e1c417d9a47405e7481d79203b3e0f580de1fa5a488d93dd3b56923", kill_on_drop: false }`
[INFO] [stdout] 4e9e15ec9e1c417d9a47405e7481d79203b3e0f580de1fa5a488d93dd3b56923
