mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-08-26 15:40:18 +00:00
* fix(ci): secrets can't be used in step if conditions [skip-regression-check] (#787) GitHub Actions step-level `if:` doesn't have access to `secrets` context. Replace `if: secrets.X != ''` with `continue-on-error: true` and let the Set token step handle the fallback. Co-authored-by: Claude Sonnet 4.6 <[email protected]> * feat: add channel-relay integration for Slack via external relay service - Add RelayChannel and RelayClient for connecting to channel-relay SSE streams - Add RelayConfig with env-based configuration (CHANNEL_RELAY_URL, CHANNEL_RELAY_API_KEY) - Add channel-relay extension lifecycle: install, OAuth auth, activate with hot-add - Add proxy message sending through channel-relay for Slack chat.postMessage - Add extension registry entry for Slack relay with OAuth auth hint - Add relay integration test with mock SSE server - Wire relay channel into app startup with reconnect on stored credentials - Add AuthRequired extension error variant for cleaner auth flow detection [skip-regression-check] * chore: apply cargo fmt * fix: remove remaining Telegram test references in relay channel * fix: address PR #790 review feedback — parser handle leak, CSRF, circuit breaker - Fix parser handle leak on reconnect by sharing Arc<RwLock> instead of creating a local copy in start() (shutdown now aborts the correct task) - Add CSRF state nonce to OAuth flow: generate in auth_channel_relay, validate in slack_relay_oauth_callback_handler, one-time use - Remove dead proxy_slack method, update integration test to use proxy_provider - Add reconnect circuit breaker (max_consecutive_failures, default 50) - Fix stale docs (Telegram refs), extract event_types constants --------- Co-authored-by: Henry Park <[email protected]> Co-authored-by: Claude Sonnet 4.6 <[email protected]>
50 lines
2.5 KiB
Rust
50 lines
2.5 KiB
Rust
//! Multi-channel input system.
|
|
//!
|
|
//! Channels receive messages from external sources (CLI, HTTP, etc.)
|
|
//! and convert them to a unified message format for the agent to process.
|
|
//!
|
|
//! # Architecture
|
|
//!
|
|
//! ```text
|
|
//! ┌─────────────────────────────────────────────────────────────────────┐
|
|
//! │ ChannelManager │
|
|
//! │ │
|
|
//! │ ┌──────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
//! │ │ ReplChannel │ │ HttpChannel │ │ WasmChannel │ ... │
|
|
//! │ └──────┬───────┘ └──────┬──────┘ └──────┬──────┘ │
|
|
//! │ │ │ │ │
|
|
//! │ └─────────────────┴─────────────────┘ │
|
|
//! │ │ │
|
|
//! │ select_all (futures) │
|
|
//! │ │ │
|
|
//! │ ▼ │
|
|
//! │ MessageStream │
|
|
//! └─────────────────────────────────────────────────────────────────────┘
|
|
//! ```
|
|
//!
|
|
//! # WASM Channels
|
|
//!
|
|
//! WASM channels allow dynamic loading of channel implementations at runtime.
|
|
//! See the [`wasm`] module for details.
|
|
|
|
mod channel;
|
|
mod http;
|
|
mod manager;
|
|
pub mod relay;
|
|
mod repl;
|
|
mod signal;
|
|
pub mod wasm;
|
|
pub mod web;
|
|
mod webhook_server;
|
|
|
|
pub use channel::{
|
|
AttachmentKind, Channel, ChannelSecretUpdater, IncomingAttachment, IncomingMessage,
|
|
MessageStream, OutgoingResponse, StatusUpdate,
|
|
};
|
|
pub use http::{HttpChannel, HttpChannelState};
|
|
pub use manager::ChannelManager;
|
|
pub use repl::ReplChannel;
|
|
pub use signal::SignalChannel;
|
|
pub use web::GatewayChannel;
|
|
pub use webhook_server::{WebhookServer, WebhookServerConfig};
|