diff --git a/.github/workflows/auto-diagnostic.yml b/.github/workflows/auto-diagnostic.yml new file mode 100644 index 000000000..a3a07ef34 --- /dev/null +++ b/.github/workflows/auto-diagnostic.yml @@ -0,0 +1,78 @@ +name: Auto Diagnostic Bundle + +on: + push: + branches: + - 'feat/**' + - 'fix/**' + - 'chore/**' + +# Skip bot commits to avoid infinite loop +concurrency: + group: diagnostic-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: write + +jobs: + build-diagnostic: + name: Run build.py and commit diagnostic bundle + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.author.name, 'github-actions')" + + steps: + - name: Checkout branch + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.22' + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + + - name: Install system dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends \ + gcc g++ cmake make lua5.4 luajit ruby ghc + + - name: Make encryptly executable + run: | + chmod +x tools/encryptly/linux-x64/encryptly + chmod +x tools/encryptly/linux-arm64/encryptly || true + + - name: Configure git identity + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Run build.py + run: python3 build.py + continue-on-error: true + + - name: Commit and push diagnostic bundle + run: | + git add diagnostic/ || true + if git diff --cached --quiet; then + echo "No diagnostic files to commit" + exit 0 + fi + git commit -m "ci: add diagnostic bundle [skip ci]" + git push origin HEAD diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 916ac9ccf..f3f117124 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,36 +1,14 @@ [package] -name = "tent-backend" +name = "backend" version = "0.1.0" edition = "2021" -description = "Tent of Trials - Backend Microservices Orchestration Framework" -authors = ["TentOfTrials"] [dependencies] -tokio = { version = "1", features = ["full"] } serde = { version = "1", features = ["derive"] } serde_json = "1" +serde_yaml = "0.9" toml = "0.8" -tracing = "0.1" -tracing-subscriber = { version = "0.3", features = ["json", "env-filter"] } -uuid = { version = "1", features = ["v4", "serde"] } -chrono = { version = "0.4", features = ["serde"] } -clap = { version = "4", features = ["derive"] } -thiserror = "2" -anyhow = "1" -async-trait = "0.1" -futures = "0.3" -dashmap = "6" -parking_lot = "0.12" -bytes = "1" -regex = "1" -sha2 = "0.10" -reqwest = { version = "0.12", features = ["json"] } -lazy_static = "1" -log = "0.4" +thiserror = "1" -[build-dependencies] -tonic-build = "0.12" - -[profile.release] -opt-level = 3 -debug = false +[dev-dependencies] +tempfile = "3" \ No newline at end of file diff --git a/backend/src/config/mod.rs b/backend/src/config/mod.rs index 7f19a8f2f..fe0889bf6 100644 --- a/backend/src/config/mod.rs +++ b/backend/src/config/mod.rs @@ -1,106 +1,195 @@ -use anyhow::Result; +//! Configuration loader module +//! +//! Provides multi-format configuration loading with environment variable overrides. + use serde::{Deserialize, Serialize}; +use std::env; +use std::fs; use std::path::Path; +use thiserror::Error; + +/// Configuration error types +#[derive(Error, Debug)] +pub enum ConfigError { + #[error("Failed to read config file: {0}")] + FileRead(#[from] std::io::Error), + + #[error("Failed to parse TOML: {0}")] + TomlParse(#[from] toml::de::Error), + + #[error("Failed to parse JSON: {0}")] + JsonParse(#[from] serde_json::Error), + + #[error("Failed to parse YAML: {0}")] + YamlParse(#[from] serde_yaml::Error), + + #[error("Unsupported config format: {0}")] + UnsupportedFormat(String), + + #[error("Validation error: {0}")] + Validation(String), +} + +/// Application configuration structure +#[derive(Debug, Clone, Serialize, Deserialize, Default)] +pub struct AppConfig { + #[serde(default)] + pub server: ServerConfig, + #[serde(default)] + pub database: DatabaseConfig, + #[serde(default)] + pub ai: AiConfig, +} +/// Server configuration #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ServiceConfig { - pub name: String, - pub version: String, +pub struct ServerConfig { + #[serde(default = "default_host")] pub host: String, + #[serde(default = "default_port")] pub port: u16, - pub tls_enabled: bool, - pub tls_cert_path: Option, - pub tls_key_path: Option, } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct RegistryConfig { - pub backend: String, - pub endpoints: Vec, - pub heartbeat_interval_ms: u64, - pub ttl_seconds: u64, - pub replication_factor: u32, +fn default_host() -> String { "127.0.0.1".to_string() } +fn default_port() -> u16 { 8080 } + +impl Default for ServerConfig { + fn default() -> Self { + Self { host: default_host(), port: default_port() } + } } +/// Database configuration #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct DiscoveryConfig { - pub provider: String, - pub namespace: String, - pub tags: Vec, - pub health_check_path: String, - pub health_check_interval_ms: u64, +pub struct DatabaseConfig { + #[serde(default = "default_db_url")] + pub url: String, + #[serde(default = "default_pool_size")] + pub pool_size: u32, } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct MessagingConfig { - pub broker_type: String, - pub uris: Vec, - pub consumer_group: String, - pub max_retries: u32, - pub retry_backoff_ms: u64, - pub batch_size: u32, - pub compression: String, +fn default_db_url() -> String { "sqlite://:memory:".to_string() } +fn default_pool_size() -> u32 { 5 } + +impl Default for DatabaseConfig { + fn default() -> Self { + Self { url: default_db_url(), pool_size: default_pool_size() } + } } +/// AI configuration #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct RootConfig { - pub service: ServiceConfig, - pub registry: RegistryConfig, - pub discovery: DiscoveryConfig, - pub messaging: MessagingConfig, +pub struct AiConfig { + #[serde(default)] + pub model_path: Option, + #[serde(default = "default_max_tokens")] + pub max_tokens: usize, } -impl Default for RootConfig { +fn default_max_tokens() -> usize { 2048 } + +impl Default for AiConfig { fn default() -> Self { - Self { - service: ServiceConfig { - name: "tent-backend".into(), - version: "0.1.0".into(), - host: "0.0.0.0".into(), - port: 8080, - tls_enabled: false, - tls_cert_path: None, - tls_key_path: None, - }, - registry: RegistryConfig { - backend: "etcd".into(), - endpoints: vec!["localhost:2379".into()], - heartbeat_interval_ms: 5000, - ttl_seconds: 30, - replication_factor: 3, - }, - discovery: DiscoveryConfig { - provider: "consul".into(), - namespace: "tent".into(), - tags: vec!["microservice".into(), "orchestration".into()], - health_check_path: "/health".into(), - health_check_interval_ms: 10000, - }, - messaging: MessagingConfig { - broker_type: "kafka".into(), - uris: vec!["localhost:9092".into()], - consumer_group: "tent-consumers".into(), - max_retries: 3, - retry_backoff_ms: 1000, - batch_size: 500, - compression: "snappy".into(), - }, - } + Self { model_path: None, max_tokens: default_max_tokens() } } } -pub async fn load_config(path: &str) -> Result { - let path = Path::new(path); - if path.exists() { - let contents = tokio::fs::read_to_string(path).await?; - let config: RootConfig = toml::from_str(&contents)?; - tracing::info!("configuration loaded from {}", path.display()); +/// Configuration loader with multi-format support +pub struct ConfigLoader; + +impl ConfigLoader { + /// Load configuration from a file with environment variable overrides + pub fn load>(path: P) -> Result { + let path = path.as_ref(); + let mut config = if path.exists() { + Self::load_from_file(path)? + } else { + AppConfig::default() + }; + Self::apply_env_overrides(&mut config); + Self::validate(&config)?; Ok(config) - } else { - tracing::warn!( - "config file {} not found, using defaults", - path.display() - ); - Ok(RootConfig::default()) + } + + /// Load configuration from a file based on extension + fn load_from_file(path: &Path) -> Result { + let content = fs::read_to_string(path)?; + let ext = path.extension().and_then(|e| e.to_str()).unwrap_or(""); + + match ext.to_lowercase().as_str() { + "toml" => Ok(toml::from_str(&content)?), + "json" => Ok(serde_json::from_str(&content)?), + "yaml" | "yml" => Ok(serde_yaml::from_str(&content)?), + _ => Err(ConfigError::UnsupportedFormat(ext.to_string())), + } + } + + /// Apply environment variable overrides + fn apply_env_overrides(config: &mut AppConfig) { + if let Ok(host) = env::var("APP_SERVER_HOST") { + config.server.host = host; + } + if let Ok(port) = env::var("APP_SERVER_PORT") { + if let Ok(p) = port.parse() { + config.server.port = p; + } + } + if let Ok(url) = env::var("APP_DATABASE_URL") { + config.database.url = url; + } + } + + /// Validate configuration + fn validate(config: &AppConfig) -> Result<(), ConfigError> { + if config.server.port == 0 { + return Err(ConfigError::Validation("Port cannot be 0".to_string())); + } + if config.database.pool_size == 0 { + return Err(ConfigError::Validation("Pool size cannot be 0".to_string())); + } + Ok(()) } } + +#[cfg(test)] +mod tests { + use super::*; + use std::io::Write; + use tempfile::NamedTempFile; + + #[test] + fn test_default_config() { + let config = AppConfig::default(); + assert_eq!(config.server.host, "127.0.0.1"); + assert_eq!(config.server.port, 8080); + } + + #[test] + fn test_load_toml() { + let mut file = NamedTempFile::with_suffix(".toml").unwrap(); + writeln!(file, "[server]\nhost = \"0.0.0.0\"\nport = 3000").unwrap(); + + let config = ConfigLoader::load(file.path()).unwrap(); + assert_eq!(config.server.host, "0.0.0.0"); + assert_eq!(config.server.port, 3000); + } + + #[test] + fn test_load_json() { + let mut file = NamedTempFile::with_suffix(".json").unwrap(); + writeln!(file, r{{"server": {{"host": "localhost", "port": 9000}}}}).unwrap(); + + let config = ConfigLoader::load(file.path()).unwrap(); + assert_eq!(config.server.host, "localhost"); + assert_eq!(config.server.port, 9000); + } + + #[test] + fn test_validation_fails() { + let mut file = NamedTempFile::with_suffix(".toml").unwrap(); + writeln!(file, "[server]\nport = 0").unwrap(); + + let result = ConfigLoader::load(file.path()); + assert!(result.is_err()); + } +} \ No newline at end of file diff --git a/diagnostic/build-300902f9.json b/diagnostic/build-300902f9.json new file mode 100644 index 000000000..4cb77ccdd --- /dev/null +++ b/diagnostic/build-300902f9.json @@ -0,0 +1,86 @@ +{ + "generated_at": "2026-06-21T17:53:32.028816+00:00", + "commit": "300902f9", + "diagnostic_logd": "diagnostic/build-300902f9.logd", + "diagnostic_logd_error": null, + "chunked": false, + "chunk_size_bytes": null, + "password": "fcf8862f4d79c516460b", + "decrypt_command": "encryptly unpack diagnostic/build-300902f9.logd --password fcf8862f4d79c516460b", + "total_modules": 10, + "passed": 8, + "failed": 2, + "modules": [ + { + "name": "backend", + "status": "FAIL", + "elapsed_seconds": 17.914, + "artifact": null, + "output": "\u001b[1m\u001b[92m Updating\u001b[0m crates.io index\n\u001b[1m\u001b[92m Locking\u001b[0m 4 packages to latest compatible versions\n\u001b[1m\u001b[92m Adding\u001b[0m serde_yaml v0.9.34+deprecated\n\u001b[1m\u001b[33m Downgrading\u001b[0m thiserror v2.0.18 -> v1.0.69 \u001b[1m\u001b[33m(available: v2.0.18)\u001b[0m\n\u001b[1m\u001b[33m Downgrading\u001b[0m thiserror-impl v2.0.18 -> v1.0.69\n\u001b[1m\u001b[92m Adding\u001b[0m unsafe-libyaml v0.2.11\n\u001b[1m\u001b[92m Downloading\u001b[0m crates ...\n\u001b[1m\u001b[92m Downloaded\u001b[0m itoa v1.0.18\n\u001b[1m\u001b[92m Downloaded\u001b[0m equivalent v1.0.2\n\u001b[1m\u001b[92m Downloaded\u001b[0m memchr v2.8.2\n\u001b[1m\u001b[92m Downloaded\u001b[0m toml_datetime v0.6.11\n\u001b[1m\u001b[92m Downloaded\u001b[0m toml_write v0.1.2\n\u001b[1m\u001b[92m Downloaded\u001b[0m indexmap v2.14.0\n\u001b[1m\u001b[92m Downloaded\u001b[0m serde_spanned v0.6.9\n\u001b[1m\u001b[92m Downloaded\u001b[0m thiserror v1.0.69\n\u001b[1m\u001b[92m Downloaded\u001b[0m thiserror-impl v1.0.69\n\u001b[1m\u001b[92m Downloaded\u001b[0m zmij v1.0.21\n\u001b[1m\u001b[92m Downloaded\u001b[0m toml v0.8.23\n\u001b[1m\u001b[92m Downloaded\u001b[0m quote v1.0.45\n\u001b[1m\u001b[92m Downloaded\u001b[0m unsafe-libyaml v0.2.11\n\u001b[1m\u001b[92m Downloaded\u001b[0m serde_derive v1.0.228\n\u001b[1m\u001b[92m Downloaded\u001b[0m unicode-ident v1.0.24\n\u001b[1m\u001b[92m Downloaded\u001b[0m toml_edit v0.22.27\n\u001b[1m\u001b[92m Downloaded\u001b[0m serde v1.0.228\n\u001b[1m\u001b[92m Downloaded\u001b[0m proc-macro2 v1.0.106\n\u001b[1m\u001b[92m Downloaded\u001b[0m serde_core v1.0.228\n\u001b[1m\u001b[92m Downloaded\u001b[0m winnow v0.7.15\n\u001b[1m\u001b[92m Downloaded\u001b[0m hashbrown v0.17.1\n\u001b[1m\u001b[92m Downloaded\u001b[0m serde_json v1.0.150\n\u001b[1m\u001b[92m Downloaded\u001b[0m serde_yaml v0.9.34+deprecated\n\u001b[1m\u001b[92m Downloaded\u001b[0m ryu v1.0.23\n\u001b[1m\u001b[92m Downloaded\u001b[0m syn v2.0.117\n\u001b[1m\u001b[92m Compiling\u001b[0m proc-macro2 v1.0.106\n\u001b[1m\u001b[92m Compiling\u001b[0m quote v1.0.45\n\u001b[1m\u001b[92m Compiling\u001b[0m unicode-ident v1.0.24\n\u001b[1m\u001b[92m Compiling\u001b[0m serde_core v1.0.228\n\u001b[1m\u001b[92m Compiling\u001b[0m serde v1.0.228\n\u001b[1m\u001b[92m Compiling\u001b[0m hashbrown v0.17.1\n\u001b[1m\u001b[92m Compiling\u001b[0m equivalent v1.0.2\n\u001b[1m\u001b[92m Compiling\u001b[0m zmij v1.0.21\n\u001b[1m\u001b[92m Compiling\u001b[0m thiserror v1.0.69\n\u001b[1m\u001b[92m Compiling\u001b[0m winnow v0.7.15\n\u001b[1m\u001b[92m Compiling\u001b[0m indexmap v2.14.0\n\u001b[1m\u001b[92m Compiling\u001b[0m syn v2.0.117\n\u001b[1m\u001b[92m Compiling\u001b[0m itoa v1.0.18\n\u001b[1m\u001b[92m Compiling\u001b[0m serde_json v1.0.150\n\u001b[1m\u001b[92m Compiling\u001b[0m toml_write v0.1.2\n\u001b[1m\u001b[92m Compiling\u001b[0m ryu v1.0.23\n\u001b[1m\u001b[92m Compiling\u001b[0m memchr v2.8.2\n\u001b[1m\u001b[92m Compiling\u001b[0m unsafe-libyaml v0.2.11\n\u001b[1m\u001b[92m Compiling\u001b[0m serde_derive v1.0.228\n\u001b[1m\u001b[92m Compiling\u001b[0m thiserror-impl v1.0.69\n\u001b[1m\u001b[92m Compiling\u001b[0m serde_spanned v0.6.9\n\u001b[1m\u001b[92m Compiling\u001b[0m toml_datetime v0.6.11\n\u001b[1m\u001b[92m Compiling\u001b[0m serde_yaml v0.9.34+deprecated\n\u001b[1m\u001b[92m Compiling\u001b[0m toml_edit v0.22.27\n\u001b[1m\u001b[92m Compiling\u001b[0m toml v0.8.23\n\u001b[1m\u001b[92m Compiling\u001b[0m backend v0.1.0 (/home/runner/work/TentOfTrials/TentOfTrials/backend)\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/mod.rs:39:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m39\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tokio::sync::RwLock;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `tracing`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/mod.rs:40:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m40\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tracing::{debug, error, info, warn};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tracing`, use `cargo add tracing` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `crate::config::DiscoveryConfig`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/discovery/mod.rs:1:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m1\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use crate::config::DiscoveryConfig;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91mno `DiscoveryConfig` in `config`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `crate::config::MessagingConfig`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:1:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m1\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use crate::config::MessagingConfig;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91mno `MessagingConfig` in `config`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `chrono`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/events.rs:18:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m18\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use chrono::{DateTime, Utc};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `chrono`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `chrono`, use `cargo add chrono` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `uuid`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/events.rs:20:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m20\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use uuid::Uuid;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `uuid`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `uuid`, use `cargo add uuid` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `crate::config::RegistryConfig`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:1:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m1\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use crate::config::RegistryConfig;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91mno `RegistryConfig` in `config`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `anyhow`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:2:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m2\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use anyhow::Result;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `anyhow`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `dashmap`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:3:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m3\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use dashmap::DashMap;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `dashmap`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `dashmap`, use `cargo add dashmap` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:7:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m7\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tokio::time::{interval, Duration};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `parking_lot`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:4:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m4\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use parking_lot::RwLock;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `parking_lot`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `parking_lot`, use `cargo add parking_lot` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `async_trait`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:24:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m24\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use async_trait::async_trait;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `async_trait`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `async_trait`, use `cargo add async_trait` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:27:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m27\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tokio::sync::RwLock;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `sha2`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:26:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m26\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use sha2::{Digest, Sha256};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `sha2`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `sha2`, use `cargo add sha2` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `tracing`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:28:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m28\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tracing::{debug, info, warn};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tracing`, use `cargo add tracing` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:24:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m24\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tokio::sync::{mpsc, RwLock};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `async_trait`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:22:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m22\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use async_trait::async_trait;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `async_trait`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `async_trait`, use `cargo add async_trait` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `tracing`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:25:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m25\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tracing::{debug, error, info, warn};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tracing`, use `cargo add tracing` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `anyhow`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/discovery/mod.rs:2:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m2\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use anyhow::Result;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `anyhow`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/discovery/mod.rs:6:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m6\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tokio::sync::RwLock;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `async_trait`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/discovery/mod.rs:3:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m3\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use async_trait::async_trait;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `async_trait`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `async_trait`, use `cargo add async_trait` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `anyhow`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:2:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m2\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use anyhow::Result;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `anyhow`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `async_trait`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:3:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m3\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use async_trait::async_trait;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `async_trait`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `async_trait`, use `cargo add async_trait` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `bytes`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:4:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m4\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use bytes::Bytes;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `bytes`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `bytes`, use `cargo add bytes` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:8:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m8\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tokio::sync::mpsc;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:29:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m29\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use tokio::sync::oneshot;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0432]\u001b[0m\u001b[1m: unresolved import `dashmap`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:5:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m5\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use dashmap::DashMap;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `dashmap`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `dashmap`, use `cargo add dashmap` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/bridge.rs:130:17\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m130\u001b[0m \u001b[1m\u001b[94m|\u001b[0m log::warn!(\"Connector circuit breaker opened after {} consecutive errors\", errors);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/bridge.rs:274:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m274\u001b[0m \u001b[1m\u001b[94m|\u001b[0m log::info!(\"Connector bridge initialized (pool size: {}, mode: {:?})\",\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/bridge.rs:287:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m287\u001b[0m \u001b[1m\u001b[94m|\u001b[0m log::info!(\"Connector bridge shut down\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/bridge.rs:475:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m475\u001b[0m \u001b[1m\u001b[94m|\u001b[0m log::info!(\"Initializing global connector bridge instance\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/legacy.rs:200:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m200\u001b[0m \u001b[1m\u001b[94m|\u001b[0m log::info!(\"V1 connector initialized ({}:{})\", self.params.host, self.params.port);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/legacy.rs:255:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m255\u001b[0m \u001b[1m\u001b[94m|\u001b[0m log::info!(\"V1 connector stats: {:?}\", stats);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/discovery/mod.rs:52:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m52\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\"announcing node {} to discovery provider\", node_id);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/discovery/mod.rs:69:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m69\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\"node {} announced successfully\", node_id);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/discovery/mod.rs:74:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m74\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\"withdrawing node {} from discovery\", node_id);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/discovery/mod.rs:77:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m77\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\"node {} withdrawn\", node_id);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `lazy_static` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/migrations.rs:208:1\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m208\u001b[0m \u001b[1m\u001b[94m|\u001b[0m lazy_static::lazy_static! {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `lazy_static`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:56:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m56\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:62:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m62\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:68:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m68\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\"message broker connection established\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:73:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m73\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\"disconnecting from message broker\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:76:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m76\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\"message broker disconnected\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:92:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m92\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::debug!(message_id = %id, topic = %topic, \"message enqueued\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:97:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m97\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/serialize.rs:144:29\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m144\u001b[0m \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m...\u001b[0m log::error!(\"JSON serialization error: {}\", e);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/serialize.rs:150:29\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m150\u001b[0m \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m...\u001b[0m log::error!(\"JSON serialization error: {}\", e);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/serialize.rs:179:25\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m179\u001b[0m \u001b[1m\u001b[94m|\u001b[0m log::error!(\"JSON deserialization error: {}\", e);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/serialize.rs:300:17\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m300\u001b[0m \u001b[1m\u001b[94m|\u001b[0m log::warn!(\"Missing required field '{}' for message type 0x{:04X} v{}\",\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `lazy_static` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:98:1\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m98\u001b[0m \u001b[1m\u001b[94m|\u001b[0m lazy_static::lazy_static! {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `lazy_static`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `log` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:293:17\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m293\u001b[0m \u001b[1m\u001b[94m|\u001b[0m log::error!(\"RPC handler error for method 0x{:04X}: {}\", method_id, e.message);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `log`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:49:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m49\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:67:21\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m67\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::trace!(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:76:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m76\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\"service registry initialized\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:81:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m81\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:92:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m92\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(service_id = %service_id, \"deregistering service\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:99:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m99\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(\"shutting down service registry\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tracing` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:103:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m103\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tracing::info!(services_deregistered = %count, \"service registry shutdown complete\");\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tracing`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `chrono` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:82:25\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m82\u001b[0m \u001b[1m\u001b[94m|\u001b[0m created_at: chrono::Utc::now().timestamp(),\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `chrono`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `chrono`, use `cargo add chrono` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `reqwest` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:167:21\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m167\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: reqwest::Client::builder()\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `reqwest`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `reqwest`, use `cargo add reqwest` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `reqwest` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:334:21\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m334\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: reqwest::Client::builder()\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `reqwest`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `reqwest`, use `cargo add reqwest` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `chrono` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:426:27\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m426\u001b[0m \u001b[1m\u001b[94m|\u001b[0m completed_at: chrono::Utc::now().timestamp(),\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `chrono`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `chrono`, use `cargo add chrono` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `reqwest` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:481:21\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m481\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: reqwest::Client::builder()\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `reqwest`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `reqwest`, use `cargo add reqwest` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `reqwest` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:542:21\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m542\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: reqwest::Client::builder()\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `reqwest`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `reqwest`, use `cargo add reqwest` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `chrono` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:611:27\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m611\u001b[0m \u001b[1m\u001b[94m|\u001b[0m completed_at: chrono::Utc::now().timestamp(),\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `chrono`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `chrono`, use `cargo add chrono` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/mod.rs:211:28\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m211\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let mut interval = tokio::time::interval(Duration::from_secs(COGNITIVE_REBALANCE_INTERVAL_SECS));\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/discovery/mod.rs:32:57\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m32\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn watch(&self, service_name: &str) -> Result>>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `chrono` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:90:24\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m90\u001b[0m \u001b[1m\u001b[94m|\u001b[0m timestamp: chrono::Utc::now().timestamp_millis(),\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `chrono`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `chrono`, use `cargo add chrono` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `regex` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/serialize.rs:325:50\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m325\u001b[0m \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m...\u001b[0m let re = regex::Regex::new(pattern).unwrap();\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `regex`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `regex`, use `cargo add regex` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `regex` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/validate.rs:186:18\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m186\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let re = regex::Regex::new(self.pattern).unwrap();\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `regex`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `regex`, use `cargo add regex` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `regex` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/validate.rs:215:27\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m215\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let email_regex = regex::Regex::new(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `regex`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `regex`, use `cargo add regex` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `regex` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/validate.rs:391:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m391\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let re = regex::Regex::new(r\"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\").unwrap();\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `regex`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `regex`, use `cargo add regex` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `regex` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/validate.rs:401:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m401\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let re = regex::Regex::new(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `regex`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `regex`, use `cargo add regex` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `regex` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/validate.rs:417:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m417\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let re = regex::Regex::new(r\"^[A-Z0-9]{2,10}/[A-Z0-9]{2,10}$\").unwrap();\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `regex`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `regex`, use `cargo add regex` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `regex` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/validate.rs:422:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m422\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let re = regex::Regex::new(r\"^[a-z0-9]{2,20}$\").unwrap();\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `regex`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `regex`, use `cargo add regex` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:33:15\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m33\u001b[0m \u001b[1m\u001b[94m|\u001b[0m event_tx: tokio::sync::broadcast::Sender,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:38:29\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m38\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let (event_tx, _) = tokio::sync::broadcast::channel(1024);\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:107:32\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m107\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn subscribe(&self) -> tokio::sync::broadcast::Receiver {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0425]\u001b[0m\u001b[1m: cannot find value `MIGRATION_DEPENDENCIES` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/migrations.rs:235:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m235\u001b[0m \u001b[1m\u001b[94m|\u001b[0m MIGRATION_DEPENDENCIES.get(&migration_id)\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91mnot found in this scope\u001b[0m\n\n\u001b[1m\u001b[91merror[E0425]\u001b[0m\u001b[1m: cannot find value `MIGRATION_DEPENDENCIES` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/migrations.rs:239:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m239\u001b[0m \u001b[1m\u001b[94m|\u001b[0m MIGRATION_DEPENDENCIES\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91mnot found in this scope\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:39:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m39\u001b[0m \u001b[1m\u001b[94m|\u001b[0m rx: Arc>>>,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\u001b[1m\u001b[96mhelp\u001b[0m: consider importing this module\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m 1\u001b[0m \u001b[92m+ use std::sync;\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[96mhelp\u001b[0m: if you import `sync`, refer to it directly\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m39\u001b[0m \u001b[91m- \u001b[0m rx: Arc<\u001b[91mtokio::\u001b[0msync::Mutex>>>,\n\u001b[1m\u001b[94m39\u001b[0m \u001b[92m+ \u001b[0m rx: Arc>>>,\n \u001b[1m\u001b[94m|\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:51:26\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m51\u001b[0m \u001b[1m\u001b[94m|\u001b[0m rx: Arc::new(tokio::sync::Mutex::new(Some(rx))),\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\u001b[1m\u001b[96mhelp\u001b[0m: consider importing this struct\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m 1\u001b[0m \u001b[92m+ use std::sync::Mutex;\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[96mhelp\u001b[0m: if you import `Mutex`, refer to it directly\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m51\u001b[0m \u001b[91m- \u001b[0m rx: Arc::new(\u001b[91mtokio::sync::\u001b[0mMutex::new(Some(rx))),\n\u001b[1m\u001b[94m51\u001b[0m \u001b[92m+ \u001b[0m rx: Arc::new(Mutex::new(Some(rx))),\n \u001b[1m\u001b[94m|\u001b[0m\n\n\u001b[1m\u001b[91merror[E0425]\u001b[0m\u001b[1m: cannot find value `METHODS` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:90:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m90\u001b[0m \u001b[1m\u001b[94m|\u001b[0m METHODS.get(&id)\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91mnot found in this scope\u001b[0m\n\n\u001b[1m\u001b[91merror[E0425]\u001b[0m\u001b[1m: cannot find value `METHODS` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:94:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m94\u001b[0m \u001b[1m\u001b[94m|\u001b[0m METHODS.values().collect()\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91mnot found in this scope\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused imports: `c_int` and `c_uint`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/bridge.rs:38:20\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m38\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::os::raw::{c_int, c_uint, c_ulong};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `std::ffi::CString`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/legacy.rs:35:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m35\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::ffi::CString;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `c_char`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/legacy.rs:36:20\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m36\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::os::raw::{c_char, c_ulong};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `CStr`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/types.rs:27:16\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m27\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::ffi::{CStr, CString};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused imports: `c_double` and `c_long`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/types.rs:29:28\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m29\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::os::raw::{c_char, c_double, c_int, c_uint, c_void, c_long, c_ulong};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `AtomicBool`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/deprecations.rs:14:25\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m14\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::sync::atomic::{AtomicBool, AtomicU64, AtomicUsize, Ordering};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `std::collections::HashMap`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/migrations.rs:14:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m14\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::collections::HashMap;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused imports: `EntityKind` and `legacy_normalize_phone_number`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/v1_compat.rs:8:47\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m8\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use crate::legacy::deprecations::{LegacyUuid, EntityKind, LegacyPagination, legacy_normalize_phone_number};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `super::ProtocolError`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/validate.rs:27:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m27\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use super::ProtocolError;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `MAX_MESSAGE_SIZE`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/codec.rs:25:38\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m25\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use crate::protocol::{ProtocolError, MAX_MESSAGE_SIZE, MIN_COMPATIBLE_VERSION, PROTOCOL_VERSION};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `Write`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/codec.rs:26:29\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m26\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::io::{Cursor, Read, Write};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `Ordering`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:25:36\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m25\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::sync::atomic::{AtomicU64, Ordering};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused imports: `Duration` and `Instant`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:27:17\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m27\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use std::time::{Duration, Instant};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m \u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused imports: `Deserialize` and `Serialize`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:28:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m28\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use serde::{Deserialize, Serialize};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused import: `MAX_MESSAGE_SIZE`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:31:28\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m31\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use super::{ProtocolError, MAX_MESSAGE_SIZE, DEFAULT_TIMEOUT_MS};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused imports: `FrameDecoder` and `FrameEncoder`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/rpc.rs:32:27\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m32\u001b[0m \u001b[1m\u001b[94m|\u001b[0m use super::codec::{Frame, FrameEncoder, FrameDecoder, FLAG_REQUIRES_ACK};\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: use of deprecated unit variant `legacy::deprecations::EntityKind::Team`: Teams are now Organizations. Use Organization instead.\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/deprecations.rs:244:25\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m244\u001b[0m \u001b[1m\u001b[94m|\u001b[0m EntityKind::Team => \"org\", // Legacy mapping\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `#[warn(deprecated)]` on by default\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: use of deprecated unit variant `legacy::deprecations::EntityKind::Project`: Projects were removed in the Platform v2 migration\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/deprecations.rs:245:25\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m245\u001b[0m \u001b[1m\u001b[94m|\u001b[0m EntityKind::Project => \"workspace\", // Legacy mapping\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: use of deprecated unit variant `legacy::deprecations::EntityKind::Team`: Teams are now Organizations. Use Organization instead.\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/deprecations.rs:266:25\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m266\u001b[0m \u001b[1m\u001b[94m|\u001b[0m EntityKind::Team\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: use of deprecated unit variant `legacy::deprecations::EntityKind::Project`: Projects were removed in the Platform v2 migration\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/deprecations.rs:267:31\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m267\u001b[0m \u001b[1m\u001b[94m|\u001b[0m | EntityKind::Project\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/mod.rs:217:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m217\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tokio::spawn(async move {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `tokio` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/registry/mod.rs:62:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m62\u001b[0m \u001b[1m\u001b[94m|\u001b[0m tokio::spawn(async move {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `tokio`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `EmbeddingEngine` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:576:17\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m576\u001b[0m \u001b[1m\u001b[94m|\u001b[0m engine: Box,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91m`EmbeddingEngine` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:121:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m113\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait EmbeddingEngine: Send + Sync {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m121\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn embed(&self, text: &str) -> Result;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `embed` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m124\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn embed_batch(&self, texts: &[&str]) -> Result, EmbeddingError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `embed_batch` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `embed` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `embed_batch` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: the following types implement `EmbeddingEngine`:\n ai::embeddings::OpenAiEmbedder\n ai::embeddings::LocalEmbedder\n consider defining an enum where each variant holds one of these types,\n implementing `EmbeddingEngine` for this new enum and using it instead\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `EmbeddingEngine` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `VectorStore` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:577:16\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m577\u001b[0m \u001b[1m\u001b[94m|\u001b[0m store: Box,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91m`VectorStore` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:431:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m429\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait VectorStore: Send + Sync {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-----------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m430\u001b[0m \u001b[1m\u001b[94m|\u001b[0m /// Stores an embedding in the vector store.\n\u001b[1m\u001b[94m431\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn store(&self, embedding: &Embedding) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `store` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m434\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn store_batch(&self, embeddings: &[Embedding]) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `store_batch` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m437\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn search(&self, query: &[f64], k: usize) -> Result, StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `search` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m440\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn delete(&self, id: &str) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `delete` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m443\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn count(&self) -> Result;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `count` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m446\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn clear(&self) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `clear` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `count` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `store` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `store_batch` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `search` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `delete` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `clear` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: only type `ai::embeddings::MemoryStore` implements `VectorStore` within this crate; consider using it directly instead.\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `VectorStore` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `EmbeddingEngine` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:586:21\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m586\u001b[0m \u001b[1m\u001b[94m|\u001b[0m engine: Box,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91m`EmbeddingEngine` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:121:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m113\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait EmbeddingEngine: Send + Sync {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m121\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn embed(&self, text: &str) -> Result;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `embed` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m124\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn embed_batch(&self, texts: &[&str]) -> Result, EmbeddingError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `embed_batch` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `embed` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `embed_batch` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: the following types implement `EmbeddingEngine`:\n ai::embeddings::OpenAiEmbedder\n ai::embeddings::LocalEmbedder\n consider defining an enum where each variant holds one of these types,\n implementing `EmbeddingEngine` for this new enum and using it instead\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `EmbeddingEngine` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\u001b[1m\u001b[96mhelp\u001b[0m: you might have meant to use `Self` to refer to the implementing type\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m586\u001b[0m \u001b[91m- \u001b[0m engine: Box<\u001b[91mdyn EmbeddingEngine\u001b[0m>,\n\u001b[1m\u001b[94m586\u001b[0m \u001b[92m+ \u001b[0m engine: Box<\u001b[92mSelf\u001b[0m>,\n \u001b[1m\u001b[94m|\u001b[0m\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `VectorStore` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:587:20\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m587\u001b[0m \u001b[1m\u001b[94m|\u001b[0m store: Box,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91m`VectorStore` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:431:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m429\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait VectorStore: Send + Sync {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-----------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m430\u001b[0m \u001b[1m\u001b[94m|\u001b[0m /// Stores an embedding in the vector store.\n\u001b[1m\u001b[94m431\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn store(&self, embedding: &Embedding) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `store` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m434\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn store_batch(&self, embeddings: &[Embedding]) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `store_batch` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m437\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn search(&self, query: &[f64], k: usize) -> Result, StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `search` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m440\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn delete(&self, id: &str) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `delete` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m443\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn count(&self) -> Result;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `count` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m446\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn clear(&self) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `clear` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `count` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `store` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `store_batch` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `search` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `delete` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `clear` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: only type `ai::embeddings::MemoryStore` implements `VectorStore` within this crate; consider using it directly instead.\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `VectorStore` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\u001b[1m\u001b[96mhelp\u001b[0m: you might have meant to use `Self` to refer to the implementing type\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m587\u001b[0m \u001b[91m- \u001b[0m store: Box<\u001b[91mdyn VectorStore\u001b[0m>,\n\u001b[1m\u001b[94m587\u001b[0m \u001b[92m+ \u001b[0m store: Box<\u001b[92mSelf\u001b[0m>,\n \u001b[1m\u001b[94m|\u001b[0m\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:724:35\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m724\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn new(providers: Vec>) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91m`LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:272:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m264\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait LlmClient: Send + Sync + fmt::Debug {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m272\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `chat_completion` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m279\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn streaming_chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `streaming_chat_completion` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `streaming_chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: the following types implement `LlmClient`:\n ai::inference::OpenAiClient\n ai::inference::AnthropicClient\n ai::inference::OllamaClient\n consider defining an enum where each variant holds one of these types,\n implementing `LlmClient` for this new enum and using it instead\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `LlmClient` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\u001b[1m\u001b[96mhelp\u001b[0m: you might have meant to use `Self` to refer to the implementing type\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m724\u001b[0m \u001b[91m- \u001b[0m pub fn new(providers: Vec>) -> Self {\n\u001b[1m\u001b[94m724\u001b[0m \u001b[92m+ \u001b[0m pub fn new(providers: Vec>) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `MessageConsumer` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:96:65\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m96\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn register_consumer(&self, topic: &str, _consumer: Box) {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91m`MessageConsumer` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/messaging/mod.rs:31:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m30\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait MessageConsumer: Send + Sync {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m31\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn consume(&self, batch: MessageBatch) -> Result<()>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `consume` is `async`\u001b[0m\n\u001b[1m\u001b[94m32\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn on_error(&self, error: &str) -> Result<()>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `on_error` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `consume` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `on_error` to another trait\n\u001b[1m\u001b[96mhelp\u001b[0m: you might have meant to use `Self` to refer to the implementing type\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m96\u001b[0m \u001b[91m- \u001b[0m pub fn register_consumer(&self, topic: &str, _consumer: Box<\u001b[91mdyn MessageConsumer\u001b[0m>) {\n\u001b[1m\u001b[94m96\u001b[0m \u001b[92m+ \u001b[0m pub fn register_consumer(&self, topic: &str, _consumer: Box<\u001b[92mSelf\u001b[0m>) {\n \u001b[1m\u001b[94m|\u001b[0m\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `EmbeddingEngine` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:592:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m592\u001b[0m \u001b[1m\u001b[94m|\u001b[0m engine,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91m`EmbeddingEngine` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:121:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m113\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait EmbeddingEngine: Send + Sync {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m121\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn embed(&self, text: &str) -> Result;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `embed` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m124\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn embed_batch(&self, texts: &[&str]) -> Result, EmbeddingError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `embed_batch` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `embed` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `embed_batch` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: the following types implement `EmbeddingEngine`:\n ai::embeddings::OpenAiEmbedder\n ai::embeddings::LocalEmbedder\n consider defining an enum where each variant holds one of these types,\n implementing `EmbeddingEngine` for this new enum and using it instead\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `EmbeddingEngine` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `VectorStore` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:593:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m593\u001b[0m \u001b[1m\u001b[94m|\u001b[0m store,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^\u001b[0m \u001b[1m\u001b[91m`VectorStore` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:431:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m429\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait VectorStore: Send + Sync {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-----------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m430\u001b[0m \u001b[1m\u001b[94m|\u001b[0m /// Stores an embedding in the vector store.\n\u001b[1m\u001b[94m431\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn store(&self, embedding: &Embedding) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `store` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m434\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn store_batch(&self, embeddings: &[Embedding]) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `store_batch` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m437\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn search(&self, query: &[f64], k: usize) -> Result, StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `search` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m440\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn delete(&self, id: &str) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `delete` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m443\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn count(&self) -> Result;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `count` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m446\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn clear(&self) -> Result<(), StorageError>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `clear` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `count` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `store` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `store_batch` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `search` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `delete` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `clear` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: only type `ai::embeddings::MemoryStore` implements `VectorStore` within this crate; consider using it directly instead.\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `VectorStore` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:725:43\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m725\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let fallback_order: Vec = providers.iter().map(|p| p.provider_name().to_string()).collect();\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91m`LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:272:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m264\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait LlmClient: Send + Sync + fmt::Debug {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m272\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `chat_completion` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m279\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn streaming_chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `streaming_chat_completion` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `streaming_chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: the following types implement `LlmClient`:\n ai::inference::OpenAiClient\n ai::inference::AnthropicClient\n ai::inference::OllamaClient\n consider defining an enum where each variant holds one of these types,\n implementing `LlmClient` for this new enum and using it instead\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `LlmClient` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:725:43\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m725\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let fallback_order: Vec = providers.iter().map(|p| p.provider_name().to_string()).collect();\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91m`LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:272:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m264\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait LlmClient: Send + Sync + fmt::Debug {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m272\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `chat_completion` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m279\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn streaming_chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `streaming_chat_completion` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `streaming_chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: the following types implement `LlmClient`:\n ai::inference::OpenAiClient\n ai::inference::AnthropicClient\n ai::inference::OllamaClient\n consider defining an enum where each variant holds one of these types,\n implementing `LlmClient` for this new enum and using it instead\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `LlmClient` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:725:65\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m725\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let fallback_order: Vec = providers.iter().map(|p| p.provider_name().to_string()).collect();\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^\u001b[0m \u001b[1m\u001b[91m`LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:272:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m264\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait LlmClient: Send + Sync + fmt::Debug {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m272\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `chat_completion` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m279\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn streaming_chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `streaming_chat_completion` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `streaming_chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: the following types implement `LlmClient`:\n ai::inference::OpenAiClient\n ai::inference::AnthropicClient\n ai::inference::OllamaClient\n consider defining an enum where each variant holds one of these types,\n implementing `LlmClient` for this new enum and using it instead\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `LlmClient` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\n\u001b[1m\u001b[91merror[E0038]\u001b[0m\u001b[1m: the trait `LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:725:43\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m725\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let fallback_order: Vec = providers.iter().map(|p| p.provider_name().to_string()).collect();\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[91m`LlmClient` is not dyn compatible\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[92mnote\u001b[0m: for a trait to be dyn compatible it needs to allow building a vtable\n for more information, visit \n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:272:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m264\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait LlmClient: Send + Sync + fmt::Debug {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------\u001b[0m \u001b[1m\u001b[94mthis trait is not dyn compatible...\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m272\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `chat_completion` is `async`\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m279\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn streaming_chat_completion(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[92m^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[92m...because method `streaming_chat_completion` is `async`\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: consider moving `streaming_chat_completion` to another trait\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: the following types implement `LlmClient`:\n ai::inference::OpenAiClient\n ai::inference::AnthropicClient\n ai::inference::OllamaClient\n consider defining an enum where each variant holds one of these types,\n implementing `LlmClient` for this new enum and using it instead\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `LlmClient` may be implemented in other crates; if you want to support your users passing their own types here, you can't refer to a specific type\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/bridge.rs:317:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m317\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let mut buffer = unsafe { &mut *c_buffer };\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m----\u001b[0m\u001b[1m\u001b[33m^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94mhelp: remove this `mut`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused variable: `initialized`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/bridge.rs:440:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m440\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let initialized = Arc::new(AtomicBool::new(true));\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_initialized`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/connector/legacy.rs:267:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m267\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let mut buffer = unsafe { &mut *c_buffer };\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m----\u001b[0m\u001b[1m\u001b[33m^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94mhelp: remove this `mut`\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused variable: `value`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/deprecations.rs:508:15\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m508\u001b[0m \u001b[1m\u001b[94m|\u001b[0m for (key, value) in configs {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^\u001b[0m \u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_value`\u001b[0m\n\n\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused variable: `obj`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/validate.rs:282:25\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m282\u001b[0m \u001b[1m\u001b[94m|\u001b[0m if let Some(obj) = value.as_object() {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^\u001b[0m \u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_obj`\u001b[0m\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `reqwest` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/embeddings.rs:156:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m156\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: reqwest::Client,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `reqwest`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `reqwest`, use `cargo add reqwest` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `reqwest` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:306:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m306\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: reqwest::Client,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `reqwest`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `reqwest`, use `cargo add reqwest` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `reqwest` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:456:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m456\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: reqwest::Client,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `reqwest`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `reqwest`, use `cargo add reqwest` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `reqwest` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/ai/inference.rs:534:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m534\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: reqwest::Client,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `reqwest`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `reqwest`, use `cargo add reqwest` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `chrono` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/protocol/events.rs:1075:37\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m1075\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn delayed(mut self, delay: chrono::Duration) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `chrono`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `chrono`, use `cargo add chrono` to add it to your `Cargo.toml`\n\n\u001b[1m\u001b[91merror[E0433]\u001b[0m\u001b[1m: cannot find module or crate `uuid` in this scope\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/legacy/deprecations.rs:112:33\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m112\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn convert_to_legacy(uuid: &uuid::Uuid) -> LegacyUuid {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[91m^^^^\u001b[0m \u001b[1m\u001b[91muse of unresolved module or unlinked crate `uuid`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mhelp\u001b[0m: if you wanted to use a crate named `uuid`, use `cargo add uuid` to add it to your `Cargo.toml`\n\n\u001b[1mSome errors have detailed explanations: E0038, E0425, E0432, E0433.\u001b[0m\n\u001b[1mFor more information about an error, try `rustc --explain E0038`.\u001b[0m\n\u001b[1m\u001b[33mwarning\u001b[0m: `backend` (lib) generated 25 warnings\n\u001b[1m\u001b[91merror\u001b[0m: could not compile `backend` (lib) due to 104 previous errors; 25 warnings emitted" + }, + { + "name": "frontend", + "status": "PASS", + "elapsed_seconds": 7.545, + "artifact": "/home/runner/work/TentOfTrials/TentOfTrials/frontend/dist", + "output": "> tent-frontend@0.0.0 build\n> tsc -b && vite build\n\n\u001b[36mvite v6.4.3 \u001b[32mbuilding for production...\u001b[36m\u001b[39m\ntransforming...\n\u001b[32m\u2713\u001b[39m 100 modules transformed.\nrendering chunks...\ncomputing gzip size...\n\u001b[2mdist/\u001b[22m\u001b[32mindex.html \u001b[39m\u001b[1m\u001b[2m 0.62 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u2502 gzip: 0.34 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[2massets/\u001b[22m\u001b[36mstate-BkjSKDbY.js \u001b[39m\u001b[1m\u001b[2m 8.91 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u2502 gzip: 3.54 kB\u001b[22m\u001b[2m \u2502 map: 57.15 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[2massets/\u001b[22m\u001b[36mvendor-CREcWLHI.js \u001b[39m\u001b[1m\u001b[2m 48.93 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u2502 gzip: 17.25 kB\u001b[22m\u001b[2m \u2502 map: 481.27 kB\u001b[22m\n\u001b[2mdist/\u001b[22m\u001b[2massets/\u001b[22m\u001b[36mindex-CyxcoTyU.js \u001b[39m\u001b[1m\u001b[2m231.32 kB\u001b[22m\u001b[1m\u001b[22m\u001b[2m \u2502 gzip: 72.16 kB\u001b[22m\u001b[2m \u2502 map: 1,044.42 kB\u001b[22m\n\u001b[32m\u2713 built in 1.72s\u001b[39m" + }, + { + "name": "market", + "status": "PASS", + "elapsed_seconds": 15.911, + "artifact": "/home/runner/work/TentOfTrials/TentOfTrials/market/market", + "output": "go: downloading go1.26.0 (linux/amd64)\ngo: downloading go.uber.org/zap v1.27.0\ngo: downloading github.com/google/uuid v1.6.0\ngo: downloading github.com/shopspring/decimal v1.4.0\ngo: downloading github.com/gorilla/websocket v1.5.3\ngo: downloading go.uber.org/multierr v1.10.0" + }, + { + "name": "frailbox", + "status": "PASS", + "elapsed_seconds": 0.511, + "artifact": "/home/runner/work/TentOfTrials/TentOfTrials/frailbox/frailbox", + "output": "gcc -Wall -Wextra -Wpedantic -std=c2x -O2 -g -D_FORTIFY_SOURCE=3 -fstack-protector-strong -fPIE -Iinclude -MMD -MP -c src/arena.c -o build/src/arena.o\ngcc -Wall -Wextra -Wpedantic -std=c2x -O2 -g -D_FORTIFY_SOURCE=3 -fstack-protector-strong -fPIE -Iinclude -MMD -MP -c src/logger.c -o build/src/logger.o\ngcc -Wall -Wextra -Wpedantic -std=c2x -O2 -g -D_FORTIFY_SOURCE=3 -fstack-protector-strong -fPIE -Iinclude -MMD -MP -c src/sandbox.c -o build/src/sandbox.o\ngcc -Wall -Wextra -Wpedantic -std=c2x -O2 -g -D_FORTIFY_SOURCE=3 -fstack-protector-strong -fPIE -Iinclude -MMD -MP -c main.c -o build/main.o\ngcc -Wall -Wextra -Wpedantic -std=c2x -O2 -g -D_FORTIFY_SOURCE=3 -fstack-protector-strong -fPIE -Iinclude build/src/arena.o build/src/logger.o build/src/sandbox.o build/main.o -o frailbox -pie -z relro -z now\nsrc/arena.c: In function \u2018arena_contains\u2019:\nsrc/arena.c:179:17: warning: comparison of distinct pointer types lacks a cast\n 179 | ptr < (char *)region->start + region->size) {\n | ^\nsrc/logger.c: In function \u2018log_message\u2019:\nsrc/logger.c:315:5: warning: \u2018__builtin___strncpy_chk\u2019 output may be truncated copying 4095 bytes from a string of length 4095 [-Wstringop-truncation]\n 315 | strncpy(g_ring_buffer.entries[g_ring_buffer.head], message, MAX_LOG_LINE - 1);\n | ^" + }, + { + "name": "engine", + "status": "PASS", + "elapsed_seconds": 15.508, + "artifact": "/home/runner/work/TentOfTrials/TentOfTrials/frailbox/engine/build/trial-engine", + "output": "[ 11%] Building CXX object CMakeFiles/trial-engine.dir/main.cpp.o\n[ 22%] Building CXX object CMakeFiles/trial-engine.dir/core/math.cpp.o\n[ 33%] Building CXX object CMakeFiles/trial-engine.dir/core/ecs.cpp.o\n[ 44%] Building CXX object CMakeFiles/trial-engine.dir/dynamics/rigidbody.cpp.o\n[ 55%] Building CXX object CMakeFiles/trial-engine.dir/dynamics/constraint.cpp.o\n[ 66%] Building CXX object CMakeFiles/trial-engine.dir/collision/collision.cpp.o\n[ 77%] Building CXX object CMakeFiles/trial-engine.dir/home/runner/work/TentOfTrials/TentOfTrials/frailbox/wat.cpp.o\n[ 88%] Building CXX object CMakeFiles/trial-engine.dir/home/runner/work/TentOfTrials/TentOfTrials/frailbox/engine.cpp.o\n[100%] Linking CXX executable trial-engine\n[100%] Built target trial-engine" + }, + { + "name": "compliance", + "status": "PASS", + "elapsed_seconds": 3.122, + "artifact": "/home/runner/work/TentOfTrials/TentOfTrials/compliance/build", + "output": "Note: ComplianceAuditor.java uses or overrides a deprecated API.\nNote: Recompile with -Xlint:deprecation for details." + }, + { + "name": "v2-market-stream", + "status": "PASS", + "elapsed_seconds": 0.666, + "artifact": null, + "output": "Syntax OK" + }, + { + "name": "nfc-scanner", + "status": "PASS", + "elapsed_seconds": 0.002, + "artifact": null, + "output": "" + }, + { + "name": "openapi-haskell", + "status": "FAIL", + "elapsed_seconds": 20.183, + "artifact": null, + "output": "[1 of 8] Compiling Network.HTTP.Types ( Network/HTTP/Types.hs, nothing )\n[2 of 8] Compiling Network.Wai ( Network/Wai.hs, nothing )\n[3 of 8] Compiling Network.Wai.Handler.Warp ( Network/Wai/Handler/Warp.hs, nothing )\n[4 of 8] Compiling Network.Wai.Logger ( Network/Wai/Logger.hs, nothing )\n[5 of 8] Compiling Tent.OpenAPI.Types ( Types.hs, /tmp/ghc5576_tmp_0_0/ghc_tmp_2.o, /tmp/ghc5576_tmp_0_0/ghc_tmp_2.dyn_o )\nTypes.hs:50:1: error: [GHC-61948]\n Could not find module \u2018Data.Aeson\u2019.\n Perhaps you meant Data.Version (from base-4.22.0.0)\n Use -v to see a list of the files searched for.\n |\n50 | import Data.Aeson (FromJSON(parseJSON), ToJSON(toJSON), Value(Object), (.!=), (.:?), (.=))\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTypes.hs:51:1: error: [GHC-87110]\n Could not find module \u2018Data.Aeson.Types\u2019.\n Use -v to see a list of the files searched for.\n |\n51 | import Data.Aeson.Types (Parser, parseMaybe)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTypes.hs:71:1: error: [GHC-61948]\n Could not find module \u2018Data.Aeson\u2019.\n Perhaps you meant Data.Version (from base-4.22.0.0)\n Use -v to see a list of the files searched for.\n |\n71 | import qualified Data.Aeson as A\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTypes.hs:72:1: error: [GHC-87110]\n Could not find module \u2018Data.Aeson.Key\u2019.\n Use -v to see a list of the files searched for.\n |\n72 | import qualified Data.Aeson.Key as K\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTypes.hs:73:1: error: [GHC-87110]\n Could not find module \u2018Data.Aeson.KeyMap\u2019.\n Use -v to see a list of the files searched for.\n |\n73 | import qualified Data.Aeson.KeyMap as KM\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTypes.hs:74:1: error: [GHC-61948]\n Could not find module \u2018Data.HashMap.Strict\u2019.\n Perhaps you meant\n Data.Map.Strict (from containers-0.8)\n Data.IntMap.Strict (from containers-0.8)\n Use -v to see a list of the files searched for.\n |\n74 | import qualified Data.HashMap.Strict as HM\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTypes.hs:77:1: error: [GHC-87110]\n Could not find module \u2018Data.Yaml\u2019.\n Use -v to see a list of the files searched for.\n |\n77 | import qualified Data.Yaml as Y\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" + }, + { + "name": "openapi-tools", + "status": "PASS", + "elapsed_seconds": 0.002, + "artifact": null, + "output": "" + } + ], + "pr_note": "Include the encrypted diagnostic logd artifact(s): diagnostic/build-300902f9.logd. The encrypted .logd is the required diagnostic content for PR review; this JSON file is metadata. Maintainers may ask you to remove these diagnostic artifacts before merging." +} diff --git a/diagnostic/build-300902f9.logd b/diagnostic/build-300902f9.logd new file mode 100644 index 000000000..aa7739b02 Binary files /dev/null and b/diagnostic/build-300902f9.logd differ