Implements Phase 9: Remoting / Cloud Hybrid Deployment with complete WebSocket transport support and comprehensive failover mechanisms. **WebSocket Transport (remote_client.rs):** - Added WebSocket support to RemoteMcpClient using tokio-tungstenite - Full bidirectional JSON-RPC communication over WebSocket - Connection establishment with error handling - Text/binary message support with proper encoding - Connection closure detection and error reporting **Failover & Redundancy (failover.rs - 323 lines):** - ServerHealth tracking: Healthy, Degraded, Down states - ServerEntry with priority-based selection (lower = higher priority) - FailoverMcpClient implementing McpClient trait - Automatic retry with exponential backoff - Circuit breaker pattern (5 consecutive failures triggers Down state) - Background health checking with configurable intervals - Graceful failover through server priority list **Configuration:** - FailoverConfig with tunable parameters: - max_retries: 3 (default) - base_retry_delay: 100ms with exponential backoff - health_check_interval: 30s - circuit_breaker_threshold: 5 failures **Testing (phase9_remoting.rs - 9 tests, all passing):** - Priority-based server selection - Automatic failover to backup servers - Retry mechanism with exponential backoff - Health status tracking and transitions - Background health checking - Circuit breaker behavior - Error handling for edge cases **Dependencies:** - tokio-tungstenite 0.21 - tungstenite 0.21 All tests pass successfully. Phase 9 specification fully implemented. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
51 lines
1.4 KiB
TOML
51 lines
1.4 KiB
TOML
[package]
|
|
name = "owlen-core"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
authors.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
homepage.workspace = true
|
|
description = "Core traits and types for OWLEN LLM client"
|
|
|
|
[dependencies]
|
|
anyhow = { workspace = true }
|
|
log = "0.4.20"
|
|
regex = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
tokio = { workspace = true }
|
|
unicode-segmentation = "1.11"
|
|
unicode-width = "0.1"
|
|
uuid = { workspace = true }
|
|
textwrap = { workspace = true }
|
|
futures = { workspace = true }
|
|
async-trait = { workspace = true }
|
|
toml = { workspace = true }
|
|
shellexpand = { workspace = true }
|
|
dirs = "5.0"
|
|
ratatui = { workspace = true }
|
|
tempfile = { workspace = true }
|
|
jsonschema = { workspace = true }
|
|
which = { workspace = true }
|
|
nix = { workspace = true }
|
|
aes-gcm = { workspace = true }
|
|
ring = { workspace = true }
|
|
keyring = { workspace = true }
|
|
chrono = { workspace = true }
|
|
crossterm = { workspace = true }
|
|
urlencoding = { workspace = true }
|
|
rpassword = { workspace = true }
|
|
sqlx = { workspace = true }
|
|
duckduckgo = "0.2.0"
|
|
reqwest = { workspace = true, features = ["default"] }
|
|
reqwest_011 = { version = "0.11", package = "reqwest" }
|
|
path-clean = "1.0"
|
|
tokio-stream = "0.1"
|
|
tokio-tungstenite = "0.21"
|
|
tungstenite = "0.21"
|
|
|
|
[dev-dependencies]
|
|
tokio-test = { workspace = true }
|