[INFO] cloning repository https://github.com/aibozo/Hub
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/aibozo/Hub" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Faibozo%2FHub", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Faibozo%2FHub'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] cb30f7edb8ffbb0240e118c506e79d0066a0e1b5
[INFO] checking aibozo/Hub against try#63132bd615c9bf75e93af8405d00064212331708 for pr-153975
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Faibozo%2FHub" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-7-tc2/source/rust-toolchain.toml
[INFO] started tweaking git repo https://github.com/aibozo/Hub
[INFO] finished tweaking git repo https://github.com/aibozo/Hub
[INFO] tweaked toml for git repo https://github.com/aibozo/Hub written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/aibozo/Hub on toolchain 63132bd615c9bf75e93af8405d00064212331708
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+63132bd615c9bf75e93af8405d00064212331708" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/aibozo/Hub 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" "+63132bd615c9bf75e93af8405d00064212331708" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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" "+63132bd615c9bf75e93af8405d00064212331708" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 283f07920aff9ab14ca58d46b67d48e05a527d4153089c32e43d93594530002f
[INFO] running `Command { std: "docker" "start" "-a" "283f07920aff9ab14ca58d46b67d48e05a527d4153089c32e43d93594530002f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "283f07920aff9ab14ca58d46b67d48e05a527d4153089c32e43d93594530002f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "283f07920aff9ab14ca58d46b67d48e05a527d4153089c32e43d93594530002f", kill_on_drop: false }`
[INFO] [stdout] 283f07920aff9ab14ca58d46b67d48e05a527d4153089c32e43d93594530002f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/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" "+63132bd615c9bf75e93af8405d00064212331708" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 174c520d6562b56a77fe3c59826cc2bb3feefcda0e7bb284bb87c7d987b8e86d
[INFO] running `Command { std: "docker" "start" "-a" "174c520d6562b56a77fe3c59826cc2bb3feefcda0e7bb284bb87c7d987b8e86d", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.101
[INFO] [stderr]    Compiling libc v0.2.175
[INFO] [stderr]     Checking cfg-if v1.0.3
[INFO] [stderr]    Compiling serde_json v1.0.143
[INFO] [stderr]    Compiling anyhow v1.0.99
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]    Compiling cc v1.2.34
[INFO] [stderr]     Checking tracing-core v0.1.34
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]     Checking bitflags v2.9.3
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]    Compiling memchr v2.7.5
[INFO] [stderr]    Compiling lock_api v0.4.13
[INFO] [stderr]    Compiling icu_properties_data v2.0.1
[INFO] [stderr]    Compiling zerocopy v0.8.26
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling rustls v0.23.31
[INFO] [stderr]    Compiling slab v0.4.11
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking urlencoding v2.1.3
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]    Compiling spin v0.9.8
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]     Checking unsafe-libyaml v0.2.11
[INFO] [stderr]     Checking parking_lot_core v0.9.11
[INFO] [stderr]     Checking signal-hook-registry v1.4.6
[INFO] [stderr]     Checking socket2 v0.6.0
[INFO] [stderr]     Checking mio v1.0.4
[INFO] [stderr]     Checking indexmap v2.11.0
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking getrandom v0.3.3
[INFO] [stderr]     Checking parking_lot v0.12.4
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]    Compiling chrono v0.4.41
[INFO] [stderr]    Compiling syn v2.0.106
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling atoi v2.0.0
[INFO] [stderr]    Compiling rustix v1.0.8
[INFO] [stderr]    Compiling flume v0.11.1
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]    Compiling tokio v1.47.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking webpki-roots v1.0.2
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling libsqlite3-sys v0.27.0
[INFO] [stderr]    Compiling futures-intrusive v0.5.0
[INFO] [stderr]     Checking data-encoding v2.9.0
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking hashlink v0.8.4
[INFO] [stderr]    Compiling sqlformat v0.2.6
[INFO] [stderr]     Checking winnow v0.7.13
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]     Checking regex-syntax v0.8.6
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking thread_local v1.1.9
[INFO] [stderr]     Checking uuid v1.18.0
[INFO] [stderr]     Checking tower-http v0.5.2
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]     Checking quick-xml v0.31.0
[INFO] [stderr]     Checking unicode-width v0.1.14
[INFO] [stderr]    Compiling tempfile v3.21.0
[INFO] [stderr]     Checking foreman-types v0.0.1 (/opt/rustwide/workdir/crates/foreman-types)
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]     Checking regex-automata v0.4.10
[INFO] [stderr]    Compiling tokio-stream v0.1.17
[INFO] [stderr]     Checking regex v1.11.2
[INFO] [stderr]     Checking rustls-webpki v0.103.4
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.0
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling zerovec-derive v0.11.1
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tracing-attributes v0.1.30
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling axum-macros v0.4.2
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]     Checking pin-project v1.1.10
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking tracing-subscriber v0.3.19
[INFO] [stderr]    Compiling yoke v0.8.0
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking tungstenite v0.24.0
[INFO] [stderr]     Checking tungstenite v0.23.0
[INFO] [stderr]    Compiling zerovec v0.11.4
[INFO] [stderr]    Compiling zerotrie v0.2.2
[INFO] [stderr]    Compiling tinystr v0.8.1
[INFO] [stderr]    Compiling potential_utf v0.1.2
[INFO] [stderr]    Compiling icu_collections v2.0.0
[INFO] [stderr]    Compiling icu_locale_core v2.0.0
[INFO] [stderr]    Compiling icu_provider v2.0.0
[INFO] [stderr]    Compiling icu_normalizer v2.0.0
[INFO] [stderr]    Compiling icu_properties v2.0.1
[INFO] [stderr]     Checking serde v1.0.219
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]     Checking axum-core v0.4.5
[INFO] [stderr]     Checking tower v0.4.13
[INFO] [stderr]    Compiling url v2.5.7
[INFO] [stderr]     Checking tokio-util v0.7.16
[INFO] [stderr]     Checking tower v0.5.2
[INFO] [stderr]     Checking tokio-rustls v0.26.2
[INFO] [stderr]     Checking tokio-tungstenite v0.24.0
[INFO] [stderr]     Checking tower-http v0.6.6
[INFO] [stderr]     Checking h2 v0.4.12
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking serde_path_to_error v0.1.17
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking which v6.0.3
[INFO] [stderr]     Checking tungstenite v0.21.0
[INFO] [stderr]     Checking foreman-mcp v0.0.1 (/opt/rustwide/workdir/crates/foreman-mcp)
[INFO] [stderr]     Checking codex-mock v0.1.0 (/opt/rustwide/workdir/mcp-servers/rust/codex-mock)
[INFO] [stdout] warning: unused import: `BufRead`
[INFO] [stdout]  --> mcp-servers/rust/codex-mock/src/main.rs:3:21
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::{self, BufRead, Write};
[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: `BufRead`
[INFO] [stdout]  --> mcp-servers/rust/codex-mock/src/main.rs:3:21
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::{self, BufRead, Write};
[INFO] [stdout]   |                     ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking mcp-git v0.0.1 (/opt/rustwide/workdir/mcp-servers/rust/git)
[INFO] [stderr]     Checking mcp-proc v0.0.1 (/opt/rustwide/workdir/mcp-servers/rust/proc)
[INFO] [stderr]     Checking mcp-fs v0.0.1 (/opt/rustwide/workdir/mcp-servers/rust/fs)
[INFO] [stderr]     Checking mcp-codex v0.1.0 (/opt/rustwide/workdir/mcp-servers/rust/codex)
[INFO] [stderr]    Compiling sqlx-core v0.7.4
[INFO] [stderr]     Checking tokio-tungstenite v0.21.0
[INFO] [stderr]     Checking foreman-policy v0.0.1 (/opt/rustwide/workdir/crates/foreman-policy)
[INFO] [stderr]     Checking mcp-shell v0.0.1 (/opt/rustwide/workdir/mcp-servers/rust/shell)
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking ui-tui v0.0.1 (/opt/rustwide/workdir/apps/ui-tui)
[INFO] [stderr]     Checking sqlx-sqlite v0.7.4
[INFO] [stderr]     Checking hyper v1.7.0
[INFO] [stderr]     Checking hyper-util v0.1.16
[INFO] [stderr]    Compiling sqlx-macros-core v0.7.4
[INFO] [stderr]     Checking hyper-rustls v0.27.7
[INFO] [stderr]     Checking axum v0.7.9
[INFO] [stderr]    Compiling sqlx-macros v0.7.4
[INFO] [stderr]     Checking reqwest v0.12.23
[INFO] [stderr]     Checking sqlx v0.7.4
[INFO] [stderr]     Checking foreman-memory v0.0.1 (/opt/rustwide/workdir/crates/foreman-memory)
[INFO] [stderr]     Checking mcp-arxiv v0.0.1 (/opt/rustwide/workdir/mcp-servers/rust/arxiv)
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> mcp-servers/rust/arxiv/src/lib.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Serialize};
[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 imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> mcp-servers/rust/arxiv/src/lib.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking assistant-core v0.0.1 (/opt/rustwide/workdir/apps/assistant-core)
[INFO] [stdout] warning: unused imports: `ApprovalStatus`, `PolicyDecisionKind`, and `PolicyDecision`
[INFO] [stdout]   --> apps/assistant-core/src/api.rs:15:35
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::gatekeeper::{Approval, ApprovalStatus, PolicyDecision, PolicyDecisionKind, ProposedAction};
[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: `tokio_stream::StreamExt`
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:378:9
[INFO] [stdout]     |
[INFO] [stdout] 378 |     use tokio_stream::StreamExt;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PathBuf`
[INFO] [stdout]  --> apps/assistant-core/src/tools.rs:5:23
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ApprovalStatus`, `PolicyDecisionKind`, and `PolicyDecision`
[INFO] [stdout]   --> apps/assistant-core/src/api.rs:15:35
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::gatekeeper::{Approval, ApprovalStatus, PolicyDecision, PolicyDecisionKind, ProposedAction};
[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: `tokio_stream::StreamExt`
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:378:9
[INFO] [stdout]     |
[INFO] [stdout] 378 |     use tokio_stream::StreamExt;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PathBuf`
[INFO] [stdout]  --> apps/assistant-core/src/tools.rs:5:23
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> apps/assistant-core/src/api.rs:1389:9
[INFO] [stdout]      |
[INFO] [stdout] 1389 |     let mut resp = client.post("https://api.openai.com/v1/chat/completions").bearer_auth(key).header("content-type","application/j...
[INFO] [stdout]      |         ----^^^^
[INFO] [stdout]      |         |
[INFO] [stdout]      |         help: remove this `mut`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> apps/assistant-core/src/api.rs:1389:9
[INFO] [stdout]      |
[INFO] [stdout] 1389 |     let mut resp = client.post("https://api.openai.com/v1/chat/completions").bearer_auth(key).header("content-type","application/j...
[INFO] [stdout]      |         ----^^^^
[INFO] [stdout]      |         |
[INFO] [stdout]      |         help: remove this `mut`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> apps/assistant-core/src/realtime.rs:7:29
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> apps/assistant-core/src/realtime.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> apps/assistant-core/src/realtime.rs:7:29
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> apps/assistant-core/src/realtime.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `req`
[INFO] [stdout]   --> apps/assistant-core/src/api.rs:70:65
[INFO] [stdout]    |
[INFO] [stdout] 70 |         .route("/api/audio/diagnose", axum::routing::post(|Json(req): Json<AudioDiagReq>| async move {
[INFO] [stdout]    |                                                                 ^^^ help: if this is intentional, prefix it with an underscore: `_req`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `req`
[INFO] [stdout]   --> apps/assistant-core/src/api.rs:70:65
[INFO] [stdout]    |
[INFO] [stdout] 70 |         .route("/api/audio/diagnose", axum::routing::post(|Json(req): Json<AudioDiagReq>| async move {
[INFO] [stdout]    |                                                                 ^^^ help: if this is intentional, prefix it with an underscore: `_req`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tm`
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:709:54
[INFO] [stdout]     |
[INFO] [stdout] 709 | async fn invoke_steam(tool: &str, params: JsonValue, tm: &ToolsManager) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |                                                      ^^ help: if this is intentional, prefix it with an underscore: `_tm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tm`
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:709:54
[INFO] [stdout]     |
[INFO] [stdout] 709 | async fn invoke_steam(tool: &str, params: JsonValue, tm: &ToolsManager) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |                                                      ^^ help: if this is intentional, prefix it with an underscore: `_tm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `selected`
[INFO] [stdout]    --> apps/assistant-core/src/scheduler.rs:166:25
[INFO] [stdout]     |
[INFO] [stdout] 166 |                     let selected: std::collections::HashSet<String> = agg.selected_ids.iter().cloned().collect();
[INFO] [stdout]     |                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_selected`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `selected`
[INFO] [stdout]    --> apps/assistant-core/src/scheduler.rs:166:25
[INFO] [stdout]     |
[INFO] [stdout] 166 |                     let selected: std::collections::HashSet<String> = agg.selected_ids.iter().cloned().collect();
[INFO] [stdout]     |                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_selected`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `opts`
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:491:31
[INFO] [stdout]     |
[INFO] [stdout] 491 |     pub async fn start(&self, opts: RealtimeOptions) -> anyhow::Result<()> {
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_opts`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `opts`
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:491:31
[INFO] [stdout]     |
[INFO] [stdout] 491 |     pub async fn start(&self, opts: RealtimeOptions) -> anyhow::Result<()> {
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_opts`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:506:9
[INFO] [stdout]     |
[INFO] [stdout] 506 |     let mut args: Vec<String> = params
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:506:9
[INFO] [stdout]     |
[INFO] [stdout] 506 |     let mut args: Vec<String> = params
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:962:9
[INFO] [stdout]     |
[INFO] [stdout] 962 |     let mut rt = tokio::runtime::Runtime::new().ok()?;
[INFO] [stdout]     |         ----^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:962:9
[INFO] [stdout]     |
[INFO] [stdout] 962 |     let mut rt = tokio::runtime::Runtime::new().ok()?;
[INFO] [stdout]     |         ----^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `seconds`, `in_sr`, `chunk_ms`, `sensitivity`, `min_speech_ms`, and `transcribe` are never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:748:36
[INFO] [stdout]     |
[INFO] [stdout] 747 | struct AudioDiagReq {
[INFO] [stdout]     |        ------------ fields in this struct
[INFO] [stdout] 748 |     #[serde(default = "def_secs")] seconds: u32,
[INFO] [stdout]     |                                    ^^^^^^^
[INFO] [stdout] 749 |     #[serde(default = "def_sr")] in_sr: u32,
[INFO] [stdout]     |                                  ^^^^^
[INFO] [stdout] 750 |     #[serde(default = "def_chunk")] chunk_ms: u32,
[INFO] [stdout]     |                                     ^^^^^^^^
[INFO] [stdout] 751 |     #[serde(default = "def_sens")] sensitivity: f32,
[INFO] [stdout]     |                                    ^^^^^^^^^^^
[INFO] [stdout] 752 |     #[serde(default = "def_min_speech")] min_speech_ms: u32,
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 753 |     #[serde(default)] transcribe: Option<bool>,
[INFO] [stdout]     |                       ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `seconds`, `out_sr`, and `freq_hz` are never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:764:55
[INFO] [stdout]     |
[INFO] [stdout] 764 | ...ct BeepReq { #[serde(default = "def_secs_short")] seconds: u32, #[serde(default = "def_out_sr")] out_sr: u32, #[serde(default = "def_freq")] freq_hz: f...
[INFO] [stdout]     |       ------- fields in this struct                  ^^^^^^^                                        ^^^^^^                                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `answer` is never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:862:37
[INFO] [stdout]     |
[INFO] [stdout] 862 | struct ApprovalAnswer { id: String, answer: String }
[INFO] [stdout]     |        --------------               ^^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        field in this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cfg` is never read
[INFO] [stdout]   --> apps/assistant-core/src/scheduler.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct Scheduler {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 29 |     cfg: SchedulerConfig,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Scheduler` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `invoke_mcp_stdio` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:148:10
[INFO] [stdout]     |
[INFO] [stdout] 148 | async fn invoke_mcp_stdio(bin: &str, tool: &str, params: JsonValue) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `ping_server` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:357:10
[INFO] [stdout]     |
[INFO] [stdout] 357 | async fn ping_server(bin: String, name: String) {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bin` and `child` are never read
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:385:5
[INFO] [stdout]     |
[INFO] [stdout] 384 | struct StdioClient {
[INFO] [stdout]     |        ----------- fields in this struct
[INFO] [stdout] 385 |     bin: String,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 386 |     child: tokio::process::Child,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `invoke_arxiv` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:782:10
[INFO] [stdout]     |
[INFO] [stdout] 782 | async fn invoke_arxiv(tool: &str, params: JsonValue) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rt_log` is never used
[INFO] [stdout]   --> apps/assistant-core/src/realtime.rs:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | fn rt_log(line: impl AsRef<str>) {
[INFO] [stdout]    |    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:440:5
[INFO] [stdout]     |
[INFO] [stdout] 435 | struct InnerState {
[INFO] [stdout]     |        ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 440 |     session_log: Option<SessionLog>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 441 |     playing_audio: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 442 |     // Accumulators for chat logging
[INFO] [stdout] 443 |     user_text_buf: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 444 |     assistant_text_buf: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 445 |     // Accumulate assistant PCM for fallback STT of agent replies
[INFO] [stdout] 446 |     assistant_pcm: Vec<i16>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 447 |     // Whether we've already appended the assistant's current turn to chat
[INFO] [stdout] 448 |     assistant_flushed: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 449 |     // True while a model response is in progress or just requested
[INFO] [stdout] 450 |     response_active: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 451 |     // De-dup executed function calls by call_id within a session
[INFO] [stdout] 452 |     processed_calls: HashSet<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 453 |     // Map client event_id -> tag for error correlation
[INFO] [stdout] 454 |     event_tags: std::collections::HashMap<String, String>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 455 |     // Recent mic audio ring buffer for local STT
[INFO] [stdout] 456 |     ring: VecDeque<i16>,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tools`, `policy`, `approval_prompt`, and `chat_dir` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 460 | pub struct RealtimeManager {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 461 |     inner: Arc<RwLock<InnerState>>,
[INFO] [stdout] 462 |     tools: crate::tools::ToolsManager,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 463 |     policy: Arc<crate::gatekeeper::PolicyEngine>,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 464 |     approval_prompt: Arc<RwLock<Option<crate::app::EphemeralApproval>>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 465 |     chat_dir: Option<PathBuf>,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RealtimeManager` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `ok`, and `error` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:802:27
[INFO] [stdout]     |
[INFO] [stdout] 802 | struct SessionToolEvent { name: String, ok: bool, error: Option<String> }
[INFO] [stdout]     |        ----------------   ^^^^          ^^        ^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        fields in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SessionToolEvent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `started_at` and `tool_calls` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:805:21
[INFO] [stdout]     |
[INFO] [stdout] 805 | struct SessionLog { started_at: DateTime<Utc>, tool_calls: Vec<SessionToolEvent> }
[INFO] [stdout]     |        ----------   ^^^^^^^^^^                 ^^^^^^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        fields in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SessionLog` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_session_summary` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:807:4
[INFO] [stdout]     |
[INFO] [stdout] 807 | fn build_session_summary(inner: &Arc<RwLock<InnerState>>, chat_dir: Option<&PathBuf>) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `truncate` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:843:4
[INFO] [stdout]     |
[INFO] [stdout] 843 | fn truncate(s: &str, n: usize) -> String { if s.len() > n { format!("{}…", &s[..n]) } else { s.to_string() } }
[INFO] [stdout]     |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_recent_context` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:845:10
[INFO] [stdout]     |
[INFO] [stdout] 845 | async fn build_recent_context(dir: &PathBuf) -> Option<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_voice_summary` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:873:10
[INFO] [stdout]     |
[INFO] [stdout] 873 | async fn append_voice_summary(dir: &PathBuf, line: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe_user_local` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:947:10
[INFO] [stdout]     |
[INFO] [stdout] 947 | async fn transcribe_user_local(pcm: &[i16], sr: u32) -> String {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `last_user_utterance` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:960:4
[INFO] [stdout]     |
[INFO] [stdout] 960 | fn last_user_utterance(dir: &PathBuf) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wake_log` is never used
[INFO] [stdout]   --> apps/assistant-core/src/wake.rs:14:4
[INFO] [stdout]    |
[INFO] [stdout] 14 | fn wake_log(line: impl AsRef<str>) {
[INFO] [stdout]    |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:206:10
[INFO] [stdout]     |
[INFO] [stdout] 206 | async fn transcribe(_pcm: &[i16], _sr: u32) -> String {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:224:4
[INFO] [stdout]     |
[INFO] [stdout] 224 | fn normalize(s: &str) -> String {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `edit_distance` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:228:4
[INFO] [stdout]     |
[INFO] [stdout] 228 | fn edit_distance(a: &str, b: &str) -> usize {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `matches_wake` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:236:4
[INFO] [stdout]     |
[INFO] [stdout] 236 | fn matches_wake(text: &str, phrase: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `seconds`, `in_sr`, `chunk_ms`, `sensitivity`, `min_speech_ms`, and `transcribe` are never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:748:36
[INFO] [stdout]     |
[INFO] [stdout] 747 | struct AudioDiagReq {
[INFO] [stdout]     |        ------------ fields in this struct
[INFO] [stdout] 748 |     #[serde(default = "def_secs")] seconds: u32,
[INFO] [stdout]     |                                    ^^^^^^^
[INFO] [stdout] 749 |     #[serde(default = "def_sr")] in_sr: u32,
[INFO] [stdout]     |                                  ^^^^^
[INFO] [stdout] 750 |     #[serde(default = "def_chunk")] chunk_ms: u32,
[INFO] [stdout]     |                                     ^^^^^^^^
[INFO] [stdout] 751 |     #[serde(default = "def_sens")] sensitivity: f32,
[INFO] [stdout]     |                                    ^^^^^^^^^^^
[INFO] [stdout] 752 |     #[serde(default = "def_min_speech")] min_speech_ms: u32,
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 753 |     #[serde(default)] transcribe: Option<bool>,
[INFO] [stdout]     |                       ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `seconds`, `out_sr`, and `freq_hz` are never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:764:55
[INFO] [stdout]     |
[INFO] [stdout] 764 | ...ct BeepReq { #[serde(default = "def_secs_short")] seconds: u32, #[serde(default = "def_out_sr")] out_sr: u32, #[serde(default = "def_freq")] freq_hz: f...
[INFO] [stdout]     |       ------- fields in this struct                  ^^^^^^^                                        ^^^^^^                                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `answer` is never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:862:37
[INFO] [stdout]     |
[INFO] [stdout] 862 | struct ApprovalAnswer { id: String, answer: String }
[INFO] [stdout]     |        --------------               ^^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        field in this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cfg` is never read
[INFO] [stdout]   --> apps/assistant-core/src/scheduler.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct Scheduler {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 29 |     cfg: SchedulerConfig,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Scheduler` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `invoke_mcp_stdio` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:148:10
[INFO] [stdout]     |
[INFO] [stdout] 148 | async fn invoke_mcp_stdio(bin: &str, tool: &str, params: JsonValue) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `ping_server` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:357:10
[INFO] [stdout]     |
[INFO] [stdout] 357 | async fn ping_server(bin: String, name: String) {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bin` and `child` are never read
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:385:5
[INFO] [stdout]     |
[INFO] [stdout] 384 | struct StdioClient {
[INFO] [stdout]     |        ----------- fields in this struct
[INFO] [stdout] 385 |     bin: String,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 386 |     child: tokio::process::Child,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `invoke_arxiv` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:782:10
[INFO] [stdout]     |
[INFO] [stdout] 782 | async fn invoke_arxiv(tool: &str, params: JsonValue) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rt_log` is never used
[INFO] [stdout]   --> apps/assistant-core/src/realtime.rs:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | fn rt_log(line: impl AsRef<str>) {
[INFO] [stdout]    |    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:440:5
[INFO] [stdout]     |
[INFO] [stdout] 435 | struct InnerState {
[INFO] [stdout]     |        ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 440 |     session_log: Option<SessionLog>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 441 |     playing_audio: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 442 |     // Accumulators for chat logging
[INFO] [stdout] 443 |     user_text_buf: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 444 |     assistant_text_buf: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 445 |     // Accumulate assistant PCM for fallback STT of agent replies
[INFO] [stdout] 446 |     assistant_pcm: Vec<i16>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 447 |     // Whether we've already appended the assistant's current turn to chat
[INFO] [stdout] 448 |     assistant_flushed: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 449 |     // True while a model response is in progress or just requested
[INFO] [stdout] 450 |     response_active: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 451 |     // De-dup executed function calls by call_id within a session
[INFO] [stdout] 452 |     processed_calls: HashSet<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 453 |     // Map client event_id -> tag for error correlation
[INFO] [stdout] 454 |     event_tags: std::collections::HashMap<String, String>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 455 |     // Recent mic audio ring buffer for local STT
[INFO] [stdout] 456 |     ring: VecDeque<i16>,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tools`, `policy`, `approval_prompt`, and `chat_dir` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 460 | pub struct RealtimeManager {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 461 |     inner: Arc<RwLock<InnerState>>,
[INFO] [stdout] 462 |     tools: crate::tools::ToolsManager,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 463 |     policy: Arc<crate::gatekeeper::PolicyEngine>,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 464 |     approval_prompt: Arc<RwLock<Option<crate::app::EphemeralApproval>>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 465 |     chat_dir: Option<PathBuf>,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RealtimeManager` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `ok`, and `error` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:802:27
[INFO] [stdout]     |
[INFO] [stdout] 802 | struct SessionToolEvent { name: String, ok: bool, error: Option<String> }
[INFO] [stdout]     |        ----------------   ^^^^          ^^        ^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        fields in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SessionToolEvent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `started_at` and `tool_calls` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:805:21
[INFO] [stdout]     |
[INFO] [stdout] 805 | struct SessionLog { started_at: DateTime<Utc>, tool_calls: Vec<SessionToolEvent> }
[INFO] [stdout]     |        ----------   ^^^^^^^^^^                 ^^^^^^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        fields in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SessionLog` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_session_summary` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:807:4
[INFO] [stdout]     |
[INFO] [stdout] 807 | fn build_session_summary(inner: &Arc<RwLock<InnerState>>, chat_dir: Option<&PathBuf>) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `truncate` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:843:4
[INFO] [stdout]     |
[INFO] [stdout] 843 | fn truncate(s: &str, n: usize) -> String { if s.len() > n { format!("{}…", &s[..n]) } else { s.to_string() } }
[INFO] [stdout]     |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_recent_context` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:845:10
[INFO] [stdout]     |
[INFO] [stdout] 845 | async fn build_recent_context(dir: &PathBuf) -> Option<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_voice_summary` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:873:10
[INFO] [stdout]     |
[INFO] [stdout] 873 | async fn append_voice_summary(dir: &PathBuf, line: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe_user_local` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:947:10
[INFO] [stdout]     |
[INFO] [stdout] 947 | async fn transcribe_user_local(pcm: &[i16], sr: u32) -> String {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `last_user_utterance` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:960:4
[INFO] [stdout]     |
[INFO] [stdout] 960 | fn last_user_utterance(dir: &PathBuf) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wake_log` is never used
[INFO] [stdout]   --> apps/assistant-core/src/wake.rs:14:4
[INFO] [stdout]    |
[INFO] [stdout] 14 | fn wake_log(line: impl AsRef<str>) {
[INFO] [stdout]    |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:206:10
[INFO] [stdout]     |
[INFO] [stdout] 206 | async fn transcribe(_pcm: &[i16], _sr: u32) -> String {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:890:12
[INFO] [stdout]     |
[INFO] [stdout] 890 |         if INSTALLER_PLANS.is_none() {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:893:9
[INFO] [stdout]     |
[INFO] [stdout] 893 |         INSTALLER_PLANS.as_ref().unwrap()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:890:12
[INFO] [stdout]     |
[INFO] [stdout] 890 |         if INSTALLER_PLANS.is_none() {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:893:9
[INFO] [stdout]     |
[INFO] [stdout] 893 |         INSTALLER_PLANS.as_ref().unwrap()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gatekeeper::ProposedAction`
[INFO] [stdout]  --> apps/assistant-core/tests/installer.rs:1:40
[INFO] [stdout]   |
[INFO] [stdout] 1 | use assistant_core::{api, app, config, gatekeeper::ProposedAction};
[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 imports: `body::Body` and `http::Request`
[INFO] [stdout]  --> apps/assistant-core/tests/system_map.rs:2:12
[INFO] [stdout]   |
[INFO] [stdout] 2 | use axum::{body::Body, http::Request};
[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: `tower::ServiceExt`
[INFO] [stdout]  --> apps/assistant-core/tests/system_map.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use tower::ServiceExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> apps/assistant-core/tests/installer.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 |     let mut approval: serde_json::Value = serde_json::from_slice(&b).unwrap();
[INFO] [stdout]    |         ----^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `status_done` is never read
[INFO] [stdout]    --> apps/assistant-core/tests/agents_api_ext.rs:103:27
[INFO] [stdout]     |
[INFO] [stdout] 103 |     let mut status_done = false;
[INFO] [stdout]     |                           ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `app_router`
[INFO] [stdout]   --> apps/assistant-core/tests/system_map.rs:31:9
[INFO] [stdout]    |
[INFO] [stdout] 31 |     let app_router = api::build_router(state.clone());
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_app_router`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `gatekeeper::ProposedAction`
[INFO] [stdout]  --> apps/assistant-core/tests/policy.rs:1:32
[INFO] [stdout]   |
[INFO] [stdout] 1 | use assistant_core::{api, app, gatekeeper::ProposedAction};
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::PathBuf`
[INFO] [stdout]  --> apps/assistant-core/tests/agents_ctr.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::path::PathBuf;
[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: `http_body_util::BodyExt`
[INFO] [stdout]   --> apps/assistant-core/tests/agents_sse.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 43 |     use http_body_util::BodyExt as _;
[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: `http_body_util::BodyExt`
[INFO] [stdout]  --> apps/assistant-core/tests/chat_stream_persistence.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use http_body_util::BodyExt as _;
[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 imports: `ApprovalStatus`, `PolicyDecisionKind`, and `PolicyDecision`
[INFO] [stdout]   --> apps/assistant-core/src/api.rs:15:35
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::gatekeeper::{Approval, ApprovalStatus, PolicyDecision, PolicyDecisionKind, ProposedAction};
[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: `tokio_stream::StreamExt`
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:378:9
[INFO] [stdout]     |
[INFO] [stdout] 378 |     use tokio_stream::StreamExt;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ApprovalId`
[INFO] [stdout]  --> apps/assistant-core/src/gatekeeper/mod.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use approvals::{Approval, ApprovalId, ApprovalStatus, ApprovalsStore};
[INFO] [stdout]   |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ExplainCard`
[INFO] [stdout]  --> apps/assistant-core/src/gatekeeper/mod.rs:7:22
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use provenance::{ExplainCard, ProvenanceEngine};
[INFO] [stdout]   |                      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PathBuf`
[INFO] [stdout]  --> apps/assistant-core/src/tools.rs:5:23
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ApprovalStatus`, `PolicyDecisionKind`, and `PolicyDecision`
[INFO] [stdout]   --> apps/assistant-core/src/api.rs:15:35
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::gatekeeper::{Approval, ApprovalStatus, PolicyDecision, PolicyDecisionKind, ProposedAction};
[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: `tokio_stream::StreamExt`
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:378:9
[INFO] [stdout]     |
[INFO] [stdout] 378 |     use tokio_stream::StreamExt;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ApprovalId`
[INFO] [stdout]  --> apps/assistant-core/src/gatekeeper/mod.rs:6:31
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use approvals::{Approval, ApprovalId, ApprovalStatus, ApprovalsStore};
[INFO] [stdout]   |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ExplainCard`
[INFO] [stdout]  --> apps/assistant-core/src/gatekeeper/mod.rs:7:22
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use provenance::{ExplainCard, ProvenanceEngine};
[INFO] [stdout]   |                      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PathBuf`
[INFO] [stdout]  --> apps/assistant-core/src/tools.rs:5:23
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::path::{Path, PathBuf};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> apps/assistant-core/src/api.rs:1389:9
[INFO] [stdout]      |
[INFO] [stdout] 1389 |     let mut resp = client.post("https://api.openai.com/v1/chat/completions").bearer_auth(key).header("content-type","application/j...
[INFO] [stdout]      |         ----^^^^
[INFO] [stdout]      |         |
[INFO] [stdout]      |         help: remove this `mut`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> apps/assistant-core/src/api.rs:1389:9
[INFO] [stdout]      |
[INFO] [stdout] 1389 |     let mut resp = client.post("https://api.openai.com/v1/chat/completions").bearer_auth(key).header("content-type","application/j...
[INFO] [stdout]      |         ----^^^^
[INFO] [stdout]      |         |
[INFO] [stdout]      |         help: remove this `mut`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> apps/assistant-core/src/realtime.rs:7:29
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> apps/assistant-core/src/realtime.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]  --> apps/assistant-core/src/realtime.rs:7:29
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> apps/assistant-core/src/realtime.rs:7:20
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `req`
[INFO] [stdout]   --> apps/assistant-core/src/api.rs:70:65
[INFO] [stdout]    |
[INFO] [stdout] 70 |         .route("/api/audio/diagnose", axum::routing::post(|Json(req): Json<AudioDiagReq>| async move {
[INFO] [stdout]    |                                                                 ^^^ help: if this is intentional, prefix it with an underscore: `_req`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `req`
[INFO] [stdout]   --> apps/assistant-core/src/api.rs:70:65
[INFO] [stdout]    |
[INFO] [stdout] 70 |         .route("/api/audio/diagnose", axum::routing::post(|Json(req): Json<AudioDiagReq>| async move {
[INFO] [stdout]    |                                                                 ^^^ help: if this is intentional, prefix it with an underscore: `_req`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tm`
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:709:54
[INFO] [stdout]     |
[INFO] [stdout] 709 | async fn invoke_steam(tool: &str, params: JsonValue, tm: &ToolsManager) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |                                                      ^^ help: if this is intentional, prefix it with an underscore: `_tm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `selected`
[INFO] [stdout]    --> apps/assistant-core/src/scheduler.rs:166:25
[INFO] [stdout]     |
[INFO] [stdout] 166 |                     let selected: std::collections::HashSet<String> = agg.selected_ids.iter().cloned().collect();
[INFO] [stdout]     |                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_selected`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tm`
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:709:54
[INFO] [stdout]     |
[INFO] [stdout] 709 | async fn invoke_steam(tool: &str, params: JsonValue, tm: &ToolsManager) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |                                                      ^^ help: if this is intentional, prefix it with an underscore: `_tm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `selected`
[INFO] [stdout]    --> apps/assistant-core/src/scheduler.rs:166:25
[INFO] [stdout]     |
[INFO] [stdout] 166 |                     let selected: std::collections::HashSet<String> = agg.selected_ids.iter().cloned().collect();
[INFO] [stdout]     |                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_selected`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `opts`
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:491:31
[INFO] [stdout]     |
[INFO] [stdout] 491 |     pub async fn start(&self, opts: RealtimeOptions) -> anyhow::Result<()> {
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_opts`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `opts`
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:491:31
[INFO] [stdout]     |
[INFO] [stdout] 491 |     pub async fn start(&self, opts: RealtimeOptions) -> anyhow::Result<()> {
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_opts`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:506:9
[INFO] [stdout]     |
[INFO] [stdout] 506 |     let mut args: Vec<String> = params
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:506:9
[INFO] [stdout]     |
[INFO] [stdout] 506 |     let mut args: Vec<String> = params
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:962:9
[INFO] [stdout]     |
[INFO] [stdout] 962 |     let mut rt = tokio::runtime::Runtime::new().ok()?;
[INFO] [stdout]     |         ----^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:962:9
[INFO] [stdout]     |
[INFO] [stdout] 962 |     let mut rt = tokio::runtime::Runtime::new().ok()?;
[INFO] [stdout]     |         ----^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `seconds`, `in_sr`, `chunk_ms`, `sensitivity`, `min_speech_ms`, and `transcribe` are never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:748:36
[INFO] [stdout]     |
[INFO] [stdout] 747 | struct AudioDiagReq {
[INFO] [stdout]     |        ------------ fields in this struct
[INFO] [stdout] 748 |     #[serde(default = "def_secs")] seconds: u32,
[INFO] [stdout]     |                                    ^^^^^^^
[INFO] [stdout] 749 |     #[serde(default = "def_sr")] in_sr: u32,
[INFO] [stdout]     |                                  ^^^^^
[INFO] [stdout] 750 |     #[serde(default = "def_chunk")] chunk_ms: u32,
[INFO] [stdout]     |                                     ^^^^^^^^
[INFO] [stdout] 751 |     #[serde(default = "def_sens")] sensitivity: f32,
[INFO] [stdout]     |                                    ^^^^^^^^^^^
[INFO] [stdout] 752 |     #[serde(default = "def_min_speech")] min_speech_ms: u32,
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 753 |     #[serde(default)] transcribe: Option<bool>,
[INFO] [stdout]     |                       ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `seconds`, `out_sr`, and `freq_hz` are never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:764:55
[INFO] [stdout]     |
[INFO] [stdout] 764 | ...ct BeepReq { #[serde(default = "def_secs_short")] seconds: u32, #[serde(default = "def_out_sr")] out_sr: u32, #[serde(default = "def_freq")] freq_hz: f...
[INFO] [stdout]     |       ------- fields in this struct                  ^^^^^^^                                        ^^^^^^                                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `answer` is never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:862:37
[INFO] [stdout]     |
[INFO] [stdout] 862 | struct ApprovalAnswer { id: String, answer: String }
[INFO] [stdout]     |        --------------               ^^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        field in this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `mcp_client` is never read
[INFO] [stdout]   --> apps/assistant-core/src/app.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct AppHandles {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub mcp_client: (),
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppHandles` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `McpClient` is never constructed
[INFO] [stdout]  --> apps/assistant-core/src/mcp_client.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct McpClient {}
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `preflight_check` are never used
[INFO] [stdout]  --> apps/assistant-core/src/mcp_client.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | impl McpClient {
[INFO] [stdout]   | -------------- associated items in this implementation
[INFO] [stdout] 7 |     pub fn new() -> Self { Self {} }
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 8 |
[INFO] [stdout] 9 |     pub fn preflight_check(&self, gate: &PolicyEngine, action: &ProposedAction) -> PolicyDecision {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `timezone` is never read
[INFO] [stdout]   --> apps/assistant-core/src/scheduler.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct SchedulerConfig {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 14 |     pub timezone: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SchedulerConfig` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cfg` is never read
[INFO] [stdout]   --> apps/assistant-core/src/scheduler.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct Scheduler {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 29 |     cfg: SchedulerConfig,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Scheduler` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `resolve_uri` is never used
[INFO] [stdout]    --> apps/assistant-core/src/system_map/mod.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl SystemMapManager {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn resolve_uri(&self, uri: &str) -> Option<serde_json::Value> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `server` is never read
[INFO] [stdout]   --> apps/assistant-core/src/tools.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct ToolManifest {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 16 |     pub server: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ToolManifest` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `servers` is never used
[INFO] [stdout]   --> apps/assistant-core/src/tools.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl ToolsManager {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn servers(&self) -> Vec<String> { self.manifests.keys().cloned().collect() }
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `invoke_mcp_stdio` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:148:10
[INFO] [stdout]     |
[INFO] [stdout] 148 | async fn invoke_mcp_stdio(bin: &str, tool: &str, params: JsonValue) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `realtime_tool_schemas` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:220:8
[INFO] [stdout]     |
[INFO] [stdout] 220 | pub fn realtime_tool_schemas(tm: &ToolsManager) -> Vec<serde_json::Value> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `ping_server` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:357:10
[INFO] [stdout]     |
[INFO] [stdout] 357 | async fn ping_server(bin: String, name: String) {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bin` and `child` are never read
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:385:5
[INFO] [stdout]     |
[INFO] [stdout] 384 | struct StdioClient {
[INFO] [stdout]     |        ----------- fields in this struct
[INFO] [stdout] 385 |     bin: String,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 386 |     child: tokio::process::Child,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `invoke_arxiv` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:782:10
[INFO] [stdout]     |
[INFO] [stdout] 782 | async fn invoke_arxiv(tool: &str, params: JsonValue) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `seconds`, `in_sr`, `chunk_ms`, `sensitivity`, `min_speech_ms`, and `transcribe` are never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:748:36
[INFO] [stdout]     |
[INFO] [stdout] 747 | struct AudioDiagReq {
[INFO] [stdout]     |        ------------ fields in this struct
[INFO] [stdout] 748 |     #[serde(default = "def_secs")] seconds: u32,
[INFO] [stdout]     |                                    ^^^^^^^
[INFO] [stdout] 749 |     #[serde(default = "def_sr")] in_sr: u32,
[INFO] [stdout]     |                                  ^^^^^
[INFO] [stdout] 750 |     #[serde(default = "def_chunk")] chunk_ms: u32,
[INFO] [stdout]     |                                     ^^^^^^^^
[INFO] [stdout] 751 |     #[serde(default = "def_sens")] sensitivity: f32,
[INFO] [stdout]     |                                    ^^^^^^^^^^^
[INFO] [stdout] 752 |     #[serde(default = "def_min_speech")] min_speech_ms: u32,
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 753 |     #[serde(default)] transcribe: Option<bool>,
[INFO] [stdout]     |                       ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rt_log` is never used
[INFO] [stdout]   --> apps/assistant-core/src/realtime.rs:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | fn rt_log(line: impl AsRef<str>) {
[INFO] [stdout]    |    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `seconds`, `out_sr`, and `freq_hz` are never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:764:55
[INFO] [stdout]     |
[INFO] [stdout] 764 | ...ct BeepReq { #[serde(default = "def_secs_short")] seconds: u32, #[serde(default = "def_out_sr")] out_sr: u32, #[serde(default = "def_freq")] freq_hz: f...
[INFO] [stdout]     |       ------- fields in this struct                  ^^^^^^^                                        ^^^^^^                                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `answer` is never read
[INFO] [stdout]    --> apps/assistant-core/src/api.rs:862:37
[INFO] [stdout]     |
[INFO] [stdout] 862 | struct ApprovalAnswer { id: String, answer: String }
[INFO] [stdout]     |        --------------               ^^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        field in this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `mcp_client` is never read
[INFO] [stdout]   --> apps/assistant-core/src/app.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct AppHandles {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub mcp_client: (),
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppHandles` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `McpClient` is never constructed
[INFO] [stdout]  --> apps/assistant-core/src/mcp_client.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct McpClient {}
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:440:5
[INFO] [stdout]     |
[INFO] [stdout] 435 | struct InnerState {
[INFO] [stdout]     |        ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 440 |     session_log: Option<SessionLog>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 441 |     playing_audio: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 442 |     // Accumulators for chat logging
[INFO] [stdout] 443 |     user_text_buf: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 444 |     assistant_text_buf: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 445 |     // Accumulate assistant PCM for fallback STT of agent replies
[INFO] [stdout] 446 |     assistant_pcm: Vec<i16>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 447 |     // Whether we've already appended the assistant's current turn to chat
[INFO] [stdout] 448 |     assistant_flushed: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 449 |     // True while a model response is in progress or just requested
[INFO] [stdout] 450 |     response_active: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 451 |     // De-dup executed function calls by call_id within a session
[INFO] [stdout] 452 |     processed_calls: HashSet<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 453 |     // Map client event_id -> tag for error correlation
[INFO] [stdout] 454 |     event_tags: std::collections::HashMap<String, String>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 455 |     // Recent mic audio ring buffer for local STT
[INFO] [stdout] 456 |     ring: VecDeque<i16>,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `preflight_check` are never used
[INFO] [stdout]  --> apps/assistant-core/src/mcp_client.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | impl McpClient {
[INFO] [stdout]   | -------------- associated items in this implementation
[INFO] [stdout] 7 |     pub fn new() -> Self { Self {} }
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 8 |
[INFO] [stdout] 9 |     pub fn preflight_check(&self, gate: &PolicyEngine, action: &ProposedAction) -> PolicyDecision {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `timezone` is never read
[INFO] [stdout]   --> apps/assistant-core/src/scheduler.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct SchedulerConfig {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 14 |     pub timezone: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SchedulerConfig` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tools`, `policy`, `approval_prompt`, and `chat_dir` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 460 | pub struct RealtimeManager {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 461 |     inner: Arc<RwLock<InnerState>>,
[INFO] [stdout] 462 |     tools: crate::tools::ToolsManager,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 463 |     policy: Arc<crate::gatekeeper::PolicyEngine>,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 464 |     approval_prompt: Arc<RwLock<Option<crate::app::EphemeralApproval>>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 465 |     chat_dir: Option<PathBuf>,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RealtimeManager` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cfg` is never read
[INFO] [stdout]   --> apps/assistant-core/src/scheduler.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct Scheduler {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 29 |     cfg: SchedulerConfig,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Scheduler` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `ok`, and `error` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:802:27
[INFO] [stdout]     |
[INFO] [stdout] 802 | struct SessionToolEvent { name: String, ok: bool, error: Option<String> }
[INFO] [stdout]     |        ----------------   ^^^^          ^^        ^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        fields in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SessionToolEvent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `started_at` and `tool_calls` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:805:21
[INFO] [stdout]     |
[INFO] [stdout] 805 | struct SessionLog { started_at: DateTime<Utc>, tool_calls: Vec<SessionToolEvent> }
[INFO] [stdout]     |        ----------   ^^^^^^^^^^                 ^^^^^^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        fields in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SessionLog` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_session_summary` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:807:4
[INFO] [stdout]     |
[INFO] [stdout] 807 | fn build_session_summary(inner: &Arc<RwLock<InnerState>>, chat_dir: Option<&PathBuf>) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `resolve_uri` is never used
[INFO] [stdout]    --> apps/assistant-core/src/system_map/mod.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl SystemMapManager {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn resolve_uri(&self, uri: &str) -> Option<serde_json::Value> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `truncate` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:843:4
[INFO] [stdout]     |
[INFO] [stdout] 843 | fn truncate(s: &str, n: usize) -> String { if s.len() > n { format!("{}…", &s[..n]) } else { s.to_string() } }
[INFO] [stdout]     |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_recent_context` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:845:10
[INFO] [stdout]     |
[INFO] [stdout] 845 | async fn build_recent_context(dir: &PathBuf) -> Option<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `server` is never read
[INFO] [stdout]   --> apps/assistant-core/src/tools.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct ToolManifest {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 16 |     pub server: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ToolManifest` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_voice_summary` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:873:10
[INFO] [stdout]     |
[INFO] [stdout] 873 | async fn append_voice_summary(dir: &PathBuf, line: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_latest_chat_message` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:895:14
[INFO] [stdout]     |
[INFO] [stdout] 895 | pub async fn append_latest_chat_message(dir: &PathBuf, role: &str, content: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `servers` is never used
[INFO] [stdout]   --> apps/assistant-core/src/tools.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl ToolsManager {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn servers(&self) -> Vec<String> { self.manifests.keys().cloned().collect() }
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe_user_local` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:947:10
[INFO] [stdout]     |
[INFO] [stdout] 947 | async fn transcribe_user_local(pcm: &[i16], sr: u32) -> String {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `invoke_mcp_stdio` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:148:10
[INFO] [stdout]     |
[INFO] [stdout] 148 | async fn invoke_mcp_stdio(bin: &str, tool: &str, params: JsonValue) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `last_user_utterance` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:960:4
[INFO] [stdout]     |
[INFO] [stdout] 960 | fn last_user_utterance(dir: &PathBuf) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `realtime_tool_schemas` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:220:8
[INFO] [stdout]     |
[INFO] [stdout] 220 | pub fn realtime_tool_schemas(tm: &ToolsManager) -> Vec<serde_json::Value> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioPlayback` is never constructed
[INFO] [stdout]   --> apps/assistant-core/src/realtime_audio.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct AudioPlayback;
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wake_log` is never used
[INFO] [stdout]   --> apps/assistant-core/src/wake.rs:14:4
[INFO] [stdout]    |
[INFO] [stdout] 14 | fn wake_log(line: impl AsRef<str>) {
[INFO] [stdout]    |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `ping_server` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:357:10
[INFO] [stdout]     |
[INFO] [stdout] 357 | async fn ping_server(bin: String, name: String) {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:206:10
[INFO] [stdout]     |
[INFO] [stdout] 206 | async fn transcribe(_pcm: &[i16], _sr: u32) -> String {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bin` and `child` are never read
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:385:5
[INFO] [stdout]     |
[INFO] [stdout] 384 | struct StdioClient {
[INFO] [stdout]     |        ----------- fields in this struct
[INFO] [stdout] 385 |     bin: String,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 386 |     child: tokio::process::Child,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_wav_pcm16` is never used
[INFO] [stdout]  --> apps/assistant-core/src/stt.rs:3:4
[INFO] [stdout]   |
[INFO] [stdout] 3 | fn encode_wav_pcm16(pcm: &[i16], sr: u32) -> Vec<u8> {
[INFO] [stdout]   |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `invoke_arxiv` is never used
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:782:10
[INFO] [stdout]     |
[INFO] [stdout] 782 | async fn invoke_arxiv(tool: &str, params: JsonValue) -> anyhow::Result<JsonValue> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe_openai_pcm16` is never used
[INFO] [stdout]   --> apps/assistant-core/src/stt.rs:26:14
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub async fn transcribe_openai_pcm16(pcm: &[i16], sr: u32) -> Result<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rt_log` is never used
[INFO] [stdout]   --> apps/assistant-core/src/realtime.rs:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | fn rt_log(line: impl AsRef<str>) {
[INFO] [stdout]    |    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe_local_pcm16` is never used
[INFO] [stdout]   --> apps/assistant-core/src/stt.rs:53:14
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub async fn transcribe_local_pcm16(pcm: &[i16], sr: u32, endpoint: Option<&str>) -> Result<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `voice_mode_suffix` is never used
[INFO] [stdout]   --> apps/assistant-core/src/prompt.rs:94:8
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub fn voice_mode_suffix() -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> apps/assistant-core/src/agents/mod.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl AgentStatus {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] 11 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_status` and `snapshot` are never used
[INFO] [stdout]   --> apps/assistant-core/src/agents/mod.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | impl AgentsSupervisor {
[INFO] [stdout]    | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn get_status(&self, id: &str) -> Option<AgentStatus> { self.states.read().get(id).copied() }
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 44 |     pub fn snapshot(&self) -> Vec<(String, AgentStatus)> { self.states.read().iter().map(|(k,v)| (k.clone(), *v)).collect() }
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:440:5
[INFO] [stdout]     |
[INFO] [stdout] 435 | struct InnerState {
[INFO] [stdout]     |        ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 440 |     session_log: Option<SessionLog>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 441 |     playing_audio: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 442 |     // Accumulators for chat logging
[INFO] [stdout] 443 |     user_text_buf: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 444 |     assistant_text_buf: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 445 |     // Accumulate assistant PCM for fallback STT of agent replies
[INFO] [stdout] 446 |     assistant_pcm: Vec<i16>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 447 |     // Whether we've already appended the assistant's current turn to chat
[INFO] [stdout] 448 |     assistant_flushed: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 449 |     // True while a model response is in progress or just requested
[INFO] [stdout] 450 |     response_active: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 451 |     // De-dup executed function calls by call_id within a session
[INFO] [stdout] 452 |     processed_calls: HashSet<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 453 |     // Map client event_id -> tag for error correlation
[INFO] [stdout] 454 |     event_tags: std::collections::HashMap<String, String>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 455 |     // Recent mic audio ring buffer for local STT
[INFO] [stdout] 456 |     ring: VecDeque<i16>,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tools`, `policy`, `approval_prompt`, and `chat_dir` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 460 | pub struct RealtimeManager {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] 461 |     inner: Arc<RwLock<InnerState>>,
[INFO] [stdout] 462 |     tools: crate::tools::ToolsManager,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 463 |     policy: Arc<crate::gatekeeper::PolicyEngine>,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 464 |     approval_prompt: Arc<RwLock<Option<crate::app::EphemeralApproval>>>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 465 |     chat_dir: Option<PathBuf>,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RealtimeManager` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `ok`, and `error` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:802:27
[INFO] [stdout]     |
[INFO] [stdout] 802 | struct SessionToolEvent { name: String, ok: bool, error: Option<String> }
[INFO] [stdout]     |        ----------------   ^^^^          ^^        ^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        fields in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SessionToolEvent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `started_at` and `tool_calls` are never read
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:805:21
[INFO] [stdout]     |
[INFO] [stdout] 805 | struct SessionLog { started_at: DateTime<Utc>, tool_calls: Vec<SessionToolEvent> }
[INFO] [stdout]     |        ----------   ^^^^^^^^^^                 ^^^^^^^^^^
[INFO] [stdout]     |        |
[INFO] [stdout]     |        fields in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SessionLog` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_session_summary` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:807:4
[INFO] [stdout]     |
[INFO] [stdout] 807 | fn build_session_summary(inner: &Arc<RwLock<InnerState>>, chat_dir: Option<&PathBuf>) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `truncate` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:843:4
[INFO] [stdout]     |
[INFO] [stdout] 843 | fn truncate(s: &str, n: usize) -> String { if s.len() > n { format!("{}…", &s[..n]) } else { s.to_string() } }
[INFO] [stdout]     |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_recent_context` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:845:10
[INFO] [stdout]     |
[INFO] [stdout] 845 | async fn build_recent_context(dir: &PathBuf) -> Option<String> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_voice_summary` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:873:10
[INFO] [stdout]     |
[INFO] [stdout] 873 | async fn append_voice_summary(dir: &PathBuf, line: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_latest_chat_message` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:895:14
[INFO] [stdout]     |
[INFO] [stdout] 895 | pub async fn append_latest_chat_message(dir: &PathBuf, role: &str, content: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe_user_local` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:947:10
[INFO] [stdout]     |
[INFO] [stdout] 947 | async fn transcribe_user_local(pcm: &[i16], sr: u32) -> String {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `last_user_utterance` is never used
[INFO] [stdout]    --> apps/assistant-core/src/realtime.rs:960:4
[INFO] [stdout]     |
[INFO] [stdout] 960 | fn last_user_utterance(dir: &PathBuf) -> Option<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioPlayback` is never constructed
[INFO] [stdout]   --> apps/assistant-core/src/realtime_audio.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct AudioPlayback;
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wake_log` is never used
[INFO] [stdout]   --> apps/assistant-core/src/wake.rs:14:4
[INFO] [stdout]    |
[INFO] [stdout] 14 | fn wake_log(line: impl AsRef<str>) {
[INFO] [stdout]    |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:206:10
[INFO] [stdout]     |
[INFO] [stdout] 206 | async fn transcribe(_pcm: &[i16], _sr: u32) -> String {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:224:4
[INFO] [stdout]     |
[INFO] [stdout] 224 | fn normalize(s: &str) -> String {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `edit_distance` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:228:4
[INFO] [stdout]     |
[INFO] [stdout] 228 | fn edit_distance(a: &str, b: &str) -> usize {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `matches_wake` is never used
[INFO] [stdout]    --> apps/assistant-core/src/wake.rs:236:4
[INFO] [stdout]     |
[INFO] [stdout] 236 | fn matches_wake(text: &str, phrase: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_wav_pcm16` is never used
[INFO] [stdout]  --> apps/assistant-core/src/stt.rs:3:4
[INFO] [stdout]   |
[INFO] [stdout] 3 | fn encode_wav_pcm16(pcm: &[i16], sr: u32) -> Vec<u8> {
[INFO] [stdout]   |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe_openai_pcm16` is never used
[INFO] [stdout]   --> apps/assistant-core/src/stt.rs:26:14
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub async fn transcribe_openai_pcm16(pcm: &[i16], sr: u32) -> Result<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `transcribe_local_pcm16` is never used
[INFO] [stdout]   --> apps/assistant-core/src/stt.rs:53:14
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub async fn transcribe_local_pcm16(pcm: &[i16], sr: u32, endpoint: Option<&str>) -> Result<String> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `voice_mode_suffix` is never used
[INFO] [stdout]   --> apps/assistant-core/src/prompt.rs:94:8
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub fn voice_mode_suffix() -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> apps/assistant-core/src/agents/mod.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl AgentStatus {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] 11 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_status` and `snapshot` are never used
[INFO] [stdout]   --> apps/assistant-core/src/agents/mod.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | impl AgentsSupervisor {
[INFO] [stdout]    | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn get_status(&self, id: &str) -> Option<AgentStatus> { self.states.read().get(id).copied() }
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 44 |     pub fn snapshot(&self) -> Vec<(String, AgentStatus)> { self.states.read().iter().map(|(k,v)| (k.clone(), *v)).collect() }
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:890:12
[INFO] [stdout]     |
[INFO] [stdout] 890 |         if INSTALLER_PLANS.is_none() {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:893:9
[INFO] [stdout]     |
[INFO] [stdout] 893 |         INSTALLER_PLANS.as_ref().unwrap()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:890:12
[INFO] [stdout]     |
[INFO] [stdout] 890 |         if INSTALLER_PLANS.is_none() {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]    --> apps/assistant-core/src/tools.rs:893:9
[INFO] [stdout]     |
[INFO] [stdout] 893 |         INSTALLER_PLANS.as_ref().unwrap()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 28s
[INFO] running `Command { std: "docker" "inspect" "174c520d6562b56a77fe3c59826cc2bb3feefcda0e7bb284bb87c7d987b8e86d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "174c520d6562b56a77fe3c59826cc2bb3feefcda0e7bb284bb87c7d987b8e86d", kill_on_drop: false }`
[INFO] [stdout] 174c520d6562b56a77fe3c59826cc2bb3feefcda0e7bb284bb87c7d987b8e86d
