use std::collections::{HashSet, VecDeque};
use std::sync::{Arc, RwLock};
use crate::thread_bus::ThreadSenders;
use crate::{
os_input_output::ServerOsApi,
panes::PaneId,
plugins::PluginInstruction,
pty::{ClientTabIndexOrPaneId, PtyInstruction},
screen::ScreenInstruction,
ServerInstruction, SessionMetaData, SessionState,
};
use zellij_utils::{
channels::SenderWithContext,
data::{Direction, Event, PluginCapabilities, ResizeStrategy},
errors::prelude::*,
input::{
actions::{Action, SearchDirection, SearchOption},
command::TerminalAction,
get_mode_info,
layout::Layout,
},
ipc::{
ClientAttributes, ClientToServerMsg, ExitReason, IpcReceiverWithContext, ServerToClientMsg,
},
};
use crate::ClientId;
pub(crate) fn route_action(
action: Action,
client_id: ClientId,
pane_id: Option<PaneId>,
senders: ThreadSenders,