[INFO] cloning repository https://github.com/rsr5/signal-ha
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/rsr5/signal-ha" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frsr5%2Fsignal-ha", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frsr5%2Fsignal-ha'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 60b34936ce558aab69e46a6912e499a8e9a19dd5
[INFO] checking rsr5/signal-ha against master#c756124775121dea0e640652c5ee3c89e3dd0eb4 for pr-154971
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Frsr5%2Fsignal-ha" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/rsr5/signal-ha
[INFO] finished tweaking git repo https://github.com/rsr5/signal-ha
[INFO] tweaked toml for git repo https://github.com/rsr5/signal-ha written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/rsr5/signal-ha on toolchain c756124775121dea0e640652c5ee3c89e3dd0eb4
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c756124775121dea0e640652c5ee3c89e3dd0eb4" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/rsr5/signal-ha 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" "+c756124775121dea0e640652c5ee3c89e3dd0eb4" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Updating git repository `https://github.com/pydantic/monty.git`
[INFO] [stderr]     Updating git repository `https://github.com/astral-sh/ruff.git`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded sunrise v3.0.0
[INFO] [stderr]   Downloaded named_pipe v0.4.1
[INFO] [stderr]   Downloaded subprocess v0.2.15
[INFO] [stderr]   Downloaded mysql v25.0.1
[INFO] [stderr]   Downloaded is-macro v0.3.7
[INFO] [stderr]   Downloaded unicode_names2_generator v1.3.0
[INFO] [stderr]   Downloaded attribute-derive-macro v0.10.5
[INFO] [stderr]   Downloaded pyo3-macros v0.25.1
[INFO] [stderr]   Downloaded frunk_derives v0.4.4
[INFO] [stderr]   Downloaded frunk_proc_macros v0.1.4
[INFO] [stderr]   Downloaded mysql_common v0.32.4
[INFO] [stderr]   Downloaded pyo3-build-config v0.28.2
[INFO] [stderr]   Downloaded pyo3-build-config v0.25.1
[INFO] [stderr]   Downloaded frunk_core v0.4.4
[INFO] [stderr]   Downloaded ordermap v1.1.0
[INFO] [stderr]   Downloaded fancy-regex v0.17.0
[INFO] [stderr]   Downloaded pyo3-ffi v0.25.1
[INFO] [stderr]   Downloaded pyo3-macros-backend v0.25.1
[INFO] [stderr]   Downloaded frunk v0.4.4
[INFO] [stderr]   Downloaded attribute-derive v0.10.5
[INFO] [stderr]   Downloaded get-size2 v0.7.4
[INFO] [stderr]   Downloaded derive_utils v0.15.1
[INFO] [stderr]   Downloaded saturating v0.1.0
[INFO] [stderr]   Downloaded mysql-common-derive v0.31.2
[INFO] [stderr]   Downloaded collection_literals v1.0.3
[INFO] [stderr]   Downloaded get-size-derive2 v0.7.4
[INFO] [stderr]   Downloaded io-enum v1.2.1
[INFO] [stderr]   Downloaded frunk_proc_macro_helpers v0.1.4
[INFO] [stderr]   Downloaded unicode_names2 v1.3.0
[INFO] [stderr]   Downloaded pyo3 v0.25.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+c756124775121dea0e640652c5ee3c89e3dd0eb4" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 3aa8282d64b11d2f9b25ee7492f8da7a417d7720af6dda63e9a58cc194ba15d3
[INFO] running `Command { std: "docker" "start" "-a" "3aa8282d64b11d2f9b25ee7492f8da7a417d7720af6dda63e9a58cc194ba15d3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "3aa8282d64b11d2f9b25ee7492f8da7a417d7720af6dda63e9a58cc194ba15d3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3aa8282d64b11d2f9b25ee7492f8da7a417d7720af6dda63e9a58cc194ba15d3", kill_on_drop: false }`
[INFO] [stdout] 3aa8282d64b11d2f9b25ee7492f8da7a417d7720af6dda63e9a58cc194ba15d3
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+c756124775121dea0e640652c5ee3c89e3dd0eb4" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 89c9243129932a23193d43e9f110c88fd5d3f1db1c7e6210c84d60a5c13489e9
[INFO] running `Command { std: "docker" "start" "-a" "89c9243129932a23193d43e9f110c88fd5d3f1db1c7e6210c84d60a5c13489e9", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling zerocopy v0.8.40
[INFO] [stderr]    Compiling target-lexicon v0.13.5
[INFO] [stderr]     Checking futures-sink v0.3.32
[INFO] [stderr]     Checking slab v0.4.12
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling tokio-macros v2.6.1
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]     Checking serde_json v1.0.149
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]     Checking indexmap v2.13.0
[INFO] [stderr]    Compiling openssl-sys v0.9.111
[INFO] [stderr]     Checking regex-syntax v0.8.10
[INFO] [stderr]     Checking futures-channel v0.3.32
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling proc-macro-utils v0.10.0
[INFO] [stderr]     Checking futures-util v0.3.32
[INFO] [stderr]     Checking http-body-util v0.1.3
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling openssl v0.10.75
[INFO] [stderr]    Compiling quote-use-macros v0.8.4
[INFO] [stderr]    Compiling manyhow-macros v0.11.4
[INFO] [stderr]     Checking serde_path_to_error v0.1.20
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]    Compiling pyo3-build-config v0.25.1
[INFO] [stderr]    Compiling collection_literals v1.0.3
[INFO] [stderr]    Compiling manyhow v0.11.4
[INFO] [stderr]    Compiling derive-where v1.6.0
[INFO] [stderr]     Checking axum-core v0.5.6
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]    Compiling quote-use v0.8.4
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]    Compiling siphasher v1.0.2
[INFO] [stderr]    Compiling attribute-derive-macro v0.10.5
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]    Compiling phf_shared v0.11.3
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking castaway v0.2.4
[INFO] [stderr]     Checking tokio v1.50.0
[INFO] [stderr]     Checking chrono v0.4.44
[INFO] [stderr]     Checking compact_str v0.9.0
[INFO] [stderr]     Checking ordermap v1.1.0
[INFO] [stderr]     Checking thiserror v2.0.18
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]    Compiling getopts v0.2.24
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]     Checking iri-string v0.7.10
[INFO] [stderr]     Checking tracing-serde v0.2.0
[INFO] [stderr]    Compiling pyo3-build-config v0.28.2
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking futures-executor v0.3.32
[INFO] [stderr]     Checking fallible-streaming-iterator v0.1.9
[INFO] [stderr]     Checking fallible-iterator v0.3.0
[INFO] [stderr]     Checking nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling attribute-derive v0.10.5
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking futures v0.3.32
[INFO] [stderr]     Checking sunrise v3.0.0
[INFO] [stderr]    Compiling heapless v0.7.17
[INFO] [stderr]     Checking unicode-ident v1.0.24
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]     Checking phf v0.11.3
[INFO] [stderr]     Checking tinyvec v1.10.0
[INFO] [stderr]    Compiling is-macro v0.3.7
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking hash32 v0.2.1
[INFO] [stderr]     Checking linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling get-size-derive2 v0.7.4
[INFO] [stderr]     Checking bit-vec v0.8.0
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking unicode-normalization v0.1.25
[INFO] [stderr]     Checking bit-set v0.8.0
[INFO] [stderr]    Compiling pyo3-ffi v0.25.1
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]    Compiling pyo3-macros-backend v0.25.1
[INFO] [stderr]     Checking cobs v0.3.0
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking postcard v1.1.3
[INFO] [stderr]    Compiling pyo3 v0.25.1
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking get-size2 v0.7.4
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking ruff_text_size v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]    Compiling monty v0.0.7 (https://github.com/pydantic/monty.git?branch=main#bf7c7ef4)
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking unindent v0.2.4
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]     Checking ruff_source_file v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]     Checking signal-ha-lighting v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-lighting)
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]     Checking bstr v1.12.1
[INFO] [stderr]     Checking ruff_python_trivia v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking tracing-subscriber v0.3.22
[INFO] [stderr]     Checking fancy-regex v0.17.0
[INFO] [stderr]     Checking ruff_python_ast v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking hashlink v0.9.1
[INFO] [stderr]     Checking tempfile v3.26.0
[INFO] [stderr]     Checking strum v0.27.2
[INFO] [stderr]     Checking tungstenite v0.24.0
[INFO] [stderr]     Checking hyper v1.8.1
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking tokio-stream v0.1.18
[INFO] [stderr]     Checking tokio-tungstenite v0.24.0
[INFO] [stderr]    Compiling phf_generator v0.11.3
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking tower-http v0.6.8
[INFO] [stderr]    Compiling phf_codegen v0.11.3
[INFO] [stderr]    Compiling unicode_names2_generator v1.3.0
[INFO] [stderr]    Compiling pyo3-macros v0.25.1
[INFO] [stderr]    Compiling unicode_names2 v1.3.0
[INFO] [stderr]     Checking axum v0.8.8
[INFO] [stderr]     Checking hyper-tls v0.6.0
[INFO] [stderr]     Checking reqwest v0.12.28
[INFO] [stderr]     Checking rusqlite v0.32.1
[INFO] [stderr]     Checking ruff_python_parser v0.0.0 (https://github.com/astral-sh/ruff.git?rev=6ded4bed1651e30b34dd04cdaa50c763036abb0d#6ded4bed)
[INFO] [stderr]     Checking signal-ha v0.1.0 (/opt/rustwide/workdir/crates/signal-ha)
[INFO] [stderr]     Checking message-board v0.1.0 (/opt/rustwide/workdir/crates/message-board)
[INFO] [stderr]     Checking signal-ha-py v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-py)
[INFO] [stderr]     Checking signal-ha-recorder v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-recorder)
[INFO] [stderr]     Checking signal-ha-shell v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-shell)
[INFO] [stderr]     Checking signal-ha-agent v0.1.0 (/opt/rustwide/workdir/crates/signal-ha-agent)
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:20
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                    ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:26
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:40
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:53:36
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub fn register_all(registry: &mut ToolRegistry, opts: &HaToolOpts) {
[INFO] [stdout]    |                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:91:6
[INFO] [stdout]    |
[INFO] [stdout] 91 | impl Tool for GetStateTool {
[INFO] [stdout]    |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:138:6
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl Tool for GetStatesTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:203:6
[INFO] [stdout]     |
[INFO] [stdout] 203 | impl Tool for GetHistoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:298:6
[INFO] [stdout]     |
[INFO] [stdout] 298 | impl Tool for GetLogbookTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:372:6
[INFO] [stdout]     |
[INFO] [stdout] 372 | impl Tool for GetStatusPageTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:414:6
[INFO] [stdout]     |
[INFO] [stdout] 414 | impl Tool for WriteLogTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:451:6
[INFO] [stdout]     |
[INFO] [stdout] 451 | impl Tool for GetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:483:6
[INFO] [stdout]     |
[INFO] [stdout] 483 | impl Tool for SetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:521:6
[INFO] [stdout]     |
[INFO] [stdout] 521 | impl Tool for ScheduleNextSessionTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:550:6
[INFO] [stdout]     |
[INFO] [stdout] 550 | impl Tool for SuggestConfigChangeTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:103:38
[INFO] [stdout]     |
[INFO] [stdout] 103 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:24
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:34
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:24
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:30
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:27
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:153:38
[INFO] [stdout]     |
[INFO] [stdout] 153 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:34
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:24
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:13
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:218:38
[INFO] [stdout]     |
[INFO] [stdout] 218 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:24
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:25
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:31
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:29
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:27
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:313:38
[INFO] [stdout]     |
[INFO] [stdout] 313 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:25
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:31
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:29
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:27
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:390:38
[INFO] [stdout]     |
[INFO] [stdout] 390 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:33
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:31
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:29
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:27
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:429:38
[INFO] [stdout]     |
[INFO] [stdout] 429 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:13
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:466:38
[INFO] [stdout]     |
[INFO] [stdout] 466 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:13
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:501:38
[INFO] [stdout]     |
[INFO] [stdout] 501 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:24
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:27
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:27
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:536:38
[INFO] [stdout]     |
[INFO] [stdout] 536 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:13
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:568:38
[INFO] [stdout]     |
[INFO] [stdout] 568 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:13
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `ha_tools::tests::register_all_builds_registry`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:637:11
[INFO] [stdout]     |
[INFO] [stdout] 637 |       async fn register_all_builds_registry() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] ...   |
[INFO] [stdout] 647 | |         assert!(docs.contains("suggest_config_change"));
[INFO] [stdout] 648 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `ha_tools::tests::schedule_sets_duration`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:610:11
[INFO] [stdout]     |
[INFO] [stdout] 610 |       async fn schedule_sets_duration() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 611 | |         let next = Arc::new(Mutex::new(None));
[INFO] [stdout] 612 | |         let tool = ScheduleNextSessionTool { next: next.clone() };
[INFO] [stdout] ...   |
[INFO] [stdout] 616 | |         assert_eq!(*next.lock().await, Some(Duration::from_secs(12 * 3600)));
[INFO] [stdout] 617 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `ha_tools::tests::suggest_config_change_logs`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:620:11
[INFO] [stdout]     |
[INFO] [stdout] 620 |       async fn suggest_config_change_logs() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 621 | |         let tool = SuggestConfigChangeTool;
[INFO] [stdout] 622 | |         let r = tool
[INFO] [stdout] 623 | |             .execute(json!({
[INFO] [stdout] ...   |
[INFO] [stdout] 633 | |         assert!(r.output.contains("high"));
[INFO] [stdout] 634 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `ha_tools::tests::write_log_levels`: Use ha_host instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:599:11
[INFO] [stdout]     |
[INFO] [stdout] 599 |       async fn write_log_levels() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 600 | |         let tool = WriteLogTool;
[INFO] [stdout] 601 | |         let r = tool.execute(json!({"message": "test", "level": "info"})).await;
[INFO] [stdout] 602 | |         assert!(!r.is_error);
[INFO] [stdout] ...   |
[INFO] [stdout] 606 | |         assert!(r.output.contains("Logged (warn)"));
[INFO] [stdout] 607 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::duplicate_tool_panics`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:256:5
[INFO] [stdout]     |
[INFO] [stdout] 256 | /     fn duplicate_tool_panics() {
[INFO] [stdout] 257 | |         let mut reg = ToolRegistry::new();
[INFO] [stdout] 258 | |         reg.register(EchoTool);
[INFO] [stdout] 259 | |         reg.register(EchoTool);
[INFO] [stdout] 260 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::parse_no_args`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:214:5
[INFO] [stdout]     |
[INFO] [stdout] 214 | /     fn parse_no_args() {
[INFO] [stdout] 215 | |         let content = "get_status_page()";
[INFO] [stdout] 216 | |         let paren_pos = content.find('(').unwrap();
[INFO] [stdout] 217 | |         let tool_name = &content[..paren_pos];
[INFO] [stdout] ...   |
[INFO] [stdout] 224 | |         assert!(args_str.is_empty());
[INFO] [stdout] 225 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::parse_tool_call_syntax`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:201:5
[INFO] [stdout]     |
[INFO] [stdout] 201 | /     fn parse_tool_call_syntax() {
[INFO] [stdout] 202 | |         let content = r#"get_state({"entity_id": "sensor.temp"})"#;
[INFO] [stdout] 203 | |         let paren_pos = content.find('(').unwrap();
[INFO] [stdout] 204 | |         let tool_name = &content[..paren_pos];
[INFO] [stdout] ...   |
[INFO] [stdout] 210 | |         assert_eq!(args["entity_id"], "sensor.temp");
[INFO] [stdout] 211 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::registry_dispatch`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:228:11
[INFO] [stdout]     |
[INFO] [stdout] 228 |       async fn registry_dispatch() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 229 | |         let mut reg = ToolRegistry::new();
[INFO] [stdout] 230 | |         reg.register(EchoTool);
[INFO] [stdout] ...   |
[INFO] [stdout] 234 | |         assert_eq!(result.output, "hello");
[INFO] [stdout] 235 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::registry_unknown_tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:238:11
[INFO] [stdout]     |
[INFO] [stdout] 238 |       async fn registry_unknown_tool() {
[INFO] [stdout]     |  ___________^
[INFO] [stdout] 239 | |         let reg = ToolRegistry::new();
[INFO] [stdout] 240 | |         let result = reg.dispatch("nope()").await;
[INFO] [stdout] 241 | |         assert!(result.is_error);
[INFO] [stdout] 242 | |         assert!(result.output.contains("Unknown tool"));
[INFO] [stdout] 243 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `tools::tests::tool_docs_generated`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/tools.rs:246:5
[INFO] [stdout]     |
[INFO] [stdout] 246 | /     fn tool_docs_generated() {
[INFO] [stdout] 247 | |         let mut reg = ToolRegistry::new();
[INFO] [stdout] 248 | |         reg.register(EchoTool);
[INFO] [stdout] 249 | |         let docs = reg.tool_docs();
[INFO] [stdout] 250 | |         assert!(docs.contains("echo"));
[INFO] [stdout] 251 | |         assert!(docs.contains("Echoes the input back"));
[INFO] [stdout] 252 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:20
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                    ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:26
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:28:40
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::tools::{Tool, ToolRegistry, ToolResult};
[INFO] [stdout]    |                                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:53:36
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub fn register_all(registry: &mut ToolRegistry, opts: &HaToolOpts) {
[INFO] [stdout]    |                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:91:6
[INFO] [stdout]    |
[INFO] [stdout] 91 | impl Tool for GetStateTool {
[INFO] [stdout]    |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:138:6
[INFO] [stdout]     |
[INFO] [stdout] 138 | impl Tool for GetStatesTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:203:6
[INFO] [stdout]     |
[INFO] [stdout] 203 | impl Tool for GetHistoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:298:6
[INFO] [stdout]     |
[INFO] [stdout] 298 | impl Tool for GetLogbookTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:372:6
[INFO] [stdout]     |
[INFO] [stdout] 372 | impl Tool for GetStatusPageTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:414:6
[INFO] [stdout]     |
[INFO] [stdout] 414 | impl Tool for WriteLogTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:451:6
[INFO] [stdout]     |
[INFO] [stdout] 451 | impl Tool for GetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:483:6
[INFO] [stdout]     |
[INFO] [stdout] 483 | impl Tool for SetAgentMemoryTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:521:6
[INFO] [stdout]     |
[INFO] [stdout] 521 | impl Tool for ScheduleNextSessionTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated trait `tools::Tool`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:550:6
[INFO] [stdout]     |
[INFO] [stdout] 550 | impl Tool for SuggestConfigChangeTool {
[INFO] [stdout]     |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:103:38
[INFO] [stdout]     |
[INFO] [stdout] 103 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:24
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:34
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:24
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:30
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:27
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:153:38
[INFO] [stdout]     |
[INFO] [stdout] 153 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:34
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:24
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:13
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:218:38
[INFO] [stdout]     |
[INFO] [stdout] 218 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:24
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:25
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:31
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:29
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:27
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:313:38
[INFO] [stdout]     |
[INFO] [stdout] 313 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:25
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:31
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:29
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:27
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:390:38
[INFO] [stdout]     |
[INFO] [stdout] 390 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:33
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:31
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:29
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:27
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:429:38
[INFO] [stdout]     |
[INFO] [stdout] 429 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:13
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:466:38
[INFO] [stdout]     |
[INFO] [stdout] 466 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:13
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:501:38
[INFO] [stdout]     |
[INFO] [stdout] 501 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:24
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:27
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:27
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:536:38
[INFO] [stdout]     |
[INFO] [stdout] 536 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:13
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:568:38
[INFO] [stdout]     |
[INFO] [stdout] 568 |     ) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'a>> {
[INFO] [stdout]     |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolResult`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:13
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `tools::ToolRegistry`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:641:23
[INFO] [stdout]     |
[INFO] [stdout] 641 |         let mut reg = ToolRegistry::new();
[INFO] [stdout]     |                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:54:14
[INFO] [stdout]    |
[INFO] [stdout] 54 |     registry.register(GetStateTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:59:14
[INFO] [stdout]    |
[INFO] [stdout] 59 |     registry.register(GetStatesTool { client: opts.ha_client.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:60:14
[INFO] [stdout]    |
[INFO] [stdout] 60 |     registry.register(GetHistoryTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 |     registry.register(GetLogbookTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:70:14
[INFO] [stdout]    |
[INFO] [stdout] 70 |     registry.register(GetStatusPageTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:74:14
[INFO] [stdout]    |
[INFO] [stdout] 74 |     registry.register(WriteLogTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:75:14
[INFO] [stdout]    |
[INFO] [stdout] 75 |     registry.register(GetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:76:14
[INFO] [stdout]    |
[INFO] [stdout] 76 |     registry.register(SetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:77:14
[INFO] [stdout]    |
[INFO] [stdout] 77 |     registry.register(ScheduleNextSessionTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:80:14
[INFO] [stdout]    |
[INFO] [stdout] 80 |     registry.register(SuggestConfigChangeTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:36
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:46
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:36
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:42
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                                          ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:39
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:46
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:36
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:25
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:36
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:37
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:43
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:41
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:39
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:37
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:43
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:41
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:39
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:45
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                             ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:43
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:41
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:39
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:25
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:25
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:36
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:39
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                                       ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:39
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:25
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:25
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:54:14
[INFO] [stdout]    |
[INFO] [stdout] 54 |     registry.register(GetStateTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:59:14
[INFO] [stdout]    |
[INFO] [stdout] 59 |     registry.register(GetStatesTool { client: opts.ha_client.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:60:14
[INFO] [stdout]    |
[INFO] [stdout] 60 |     registry.register(GetHistoryTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:65:14
[INFO] [stdout]    |
[INFO] [stdout] 65 |     registry.register(GetLogbookTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:70:14
[INFO] [stdout]    |
[INFO] [stdout] 70 |     registry.register(GetStatusPageTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:74:14
[INFO] [stdout]    |
[INFO] [stdout] 74 |     registry.register(WriteLogTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:75:14
[INFO] [stdout]    |
[INFO] [stdout] 75 |     registry.register(GetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:76:14
[INFO] [stdout]    |
[INFO] [stdout] 76 |     registry.register(SetAgentMemoryTool { memory: opts.shared.memory.clone() });
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:77:14
[INFO] [stdout]    |
[INFO] [stdout] 77 |     registry.register(ScheduleNextSessionTool {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]   --> crates/signal-ha-agent/src/ha_tools.rs:80:14
[INFO] [stdout]    |
[INFO] [stdout] 80 |     registry.register(SuggestConfigChangeTool);
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:106:36
[INFO] [stdout]     |
[INFO] [stdout] 106 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:111:46
[INFO] [stdout]     |
[INFO] [stdout] 111 |                 Err(e) => return ToolResult::err(format!("Error getting state for {entity_id}: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:114:36
[INFO] [stdout]     |
[INFO] [stdout] 114 |                 return ToolResult::err(format!("Error getting state for {entity_id}: HTTP {}", resp.status()));
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:117:42
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 Ok(state) => ToolResult::ok(
[INFO] [stdout]     |                                          ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:126:39
[INFO] [stdout]     |
[INFO] [stdout] 126 |                 Err(e) => ToolResult::err(format!("Error parsing state for {entity_id}: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:159:46
[INFO] [stdout]     |
[INFO] [stdout] 159 |                 Err(e) => return ToolResult::err(format!("Error fetching states: {e}")),
[INFO] [stdout]     |                                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:163:36
[INFO] [stdout]     |
[INFO] [stdout] 163 |                 return ToolResult::err("No states returned");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:190:25
[INFO] [stdout]     |
[INFO] [stdout] 190 |             ToolResult::ok(serde_json::to_string_pretty(&summary).unwrap_or_default())
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:221:36
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 return ToolResult::err("Missing required arg: entity_id");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:270:37
[INFO] [stdout]     |
[INFO] [stdout] 270 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:281:43
[INFO] [stdout]     |
[INFO] [stdout] 281 |                     Err(e) => ToolResult::err(format!("Failed to parse history response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:283:41
[INFO] [stdout]     |
[INFO] [stdout] 283 |                 Ok(resp) => ToolResult::err(format!("History API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:284:39
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 Err(e) => ToolResult::err(format!("History API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:348:37
[INFO] [stdout]     |
[INFO] [stdout] 348 |                         ToolResult::ok(
[INFO] [stdout]     |                                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:356:43
[INFO] [stdout]     |
[INFO] [stdout] 356 |                     Err(e) => ToolResult::err(format!("Failed to parse logbook response: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:358:41
[INFO] [stdout]     |
[INFO] [stdout] 358 |                 Ok(resp) => ToolResult::err(format!("Logbook API error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:359:39
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 Err(e) => ToolResult::err(format!("Logbook API request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:400:45
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     Ok(body) => ToolResult::ok(body),
[INFO] [stdout]     |                                             ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:401:43
[INFO] [stdout]     |
[INFO] [stdout] 401 |                     Err(e) => ToolResult::err(format!("Failed to read status page body: {e}")),
[INFO] [stdout]     |                                           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:403:41
[INFO] [stdout]     |
[INFO] [stdout] 403 |                 Ok(resp) => ToolResult::err(format!("Status page error: HTTP {}", resp.status())),
[INFO] [stdout]     |                                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:404:39
[INFO] [stdout]     |
[INFO] [stdout] 404 |                 Err(e) => ToolResult::err(format!("Status page request failed: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:440:25
[INFO] [stdout]     |
[INFO] [stdout] 440 |             ToolResult::ok(format!("Logged ({level}): {message}"))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:470:25
[INFO] [stdout]     |
[INFO] [stdout] 470 |             ToolResult::ok(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:504:36
[INFO] [stdout]     |
[INFO] [stdout] 504 |                 return ToolResult::err("Missing required arg: content");
[INFO] [stdout]     |                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:508:39
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 Ok(()) => ToolResult::ok("Memory saved."),
[INFO] [stdout]     |                                       ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::err`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:509:39
[INFO] [stdout]     |
[INFO] [stdout] 509 |                 Err(e) => ToolResult::err(format!("Failed to save memory: {e}")),
[INFO] [stdout]     |                                       ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:541:25
[INFO] [stdout]     |
[INFO] [stdout] 541 |             ToolResult::ok(format!("Next session scheduled in {hours} hours."))
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolResult::ok`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:582:25
[INFO] [stdout]     |
[INFO] [stdout] 582 |             ToolResult::ok(format!(
[INFO] [stdout]     |                         ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:601:22
[INFO] [stdout]     |
[INFO] [stdout] 601 |         let r = tool.execute(json!({"message": "test", "level": "info"})).await;
[INFO] [stdout]     |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::is_error`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:602:18
[INFO] [stdout]     |
[INFO] [stdout] 602 |         assert!(!r.is_error);
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::output`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:603:17
[INFO] [stdout]     |
[INFO] [stdout] 603 |         assert!(r.output.contains("Logged (info)"));
[INFO] [stdout]     |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:605:22
[INFO] [stdout]     |
[INFO] [stdout] 605 |         let r = tool.execute(json!({"message": "test", "level": "warn"})).await;
[INFO] [stdout]     |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::output`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:606:17
[INFO] [stdout]     |
[INFO] [stdout] 606 |         assert!(r.output.contains("Logged (warn)"));
[INFO] [stdout]     |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:614:22
[INFO] [stdout]     |
[INFO] [stdout] 614 |         let r = tool.execute(json!({"hours": 12})).await;
[INFO] [stdout]     |                      ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::is_error`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:615:18
[INFO] [stdout]     |
[INFO] [stdout] 615 |         assert!(!r.is_error);
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::Tool::execute`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:623:14
[INFO] [stdout]     |
[INFO] [stdout] 623 |             .execute(json!({
[INFO] [stdout]     |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::is_error`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:632:18
[INFO] [stdout]     |
[INFO] [stdout] 632 |         assert!(!r.is_error);
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `tools::ToolResult::output`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:633:17
[INFO] [stdout]     |
[INFO] [stdout] 633 |         assert!(r.output.contains("high"));
[INFO] [stdout]     |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `tools::ToolRegistry::new`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:641:37
[INFO] [stdout]     |
[INFO] [stdout] 641 |         let mut reg = ToolRegistry::new();
[INFO] [stdout]     |                                     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:642:13
[INFO] [stdout]     |
[INFO] [stdout] 642 |         reg.register(WriteLogTool);
[INFO] [stdout]     |             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::register`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:643:13
[INFO] [stdout]     |
[INFO] [stdout] 643 |         reg.register(SuggestConfigChangeTool);
[INFO] [stdout]     |             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `tools::ToolRegistry::tool_docs`: Use engine instead — Python runtime replaces Tool dispatch
[INFO] [stdout]    --> crates/signal-ha-agent/src/ha_tools.rs:645:24
[INFO] [stdout]     |
[INFO] [stdout] 645 |         let docs = reg.tool_docs();
[INFO] [stdout]     |                        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start_line` is never read
[INFO] [stdout]   --> crates/signal-ha-agent/src/parser.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct CodeBlock {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub start_line: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CodeBlock` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `start_line` is never read
[INFO] [stdout]   --> crates/signal-ha-agent/src/parser.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct CodeBlock {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub start_line: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CodeBlock` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 02s
[INFO] running `Command { std: "docker" "inspect" "89c9243129932a23193d43e9f110c88fd5d3f1db1c7e6210c84d60a5c13489e9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "89c9243129932a23193d43e9f110c88fd5d3f1db1c7e6210c84d60a5c13489e9", kill_on_drop: false }`
[INFO] [stdout] 89c9243129932a23193d43e9f110c88fd5d3f1db1c7e6210c84d60a5c13489e9
