use std::path::PathBuf;
use tokio::sync::oneshot;
use crate::error::SessionError;
use crate::session::SessionId;
#[derive(Debug, Clone)]
pub struct AutoInputStep {
pub data: Vec<u8>,
pub delay_ms: u64,
}
#[derive(Debug)]
pub enum SessionCommand {
Create {
cmd: String,
args: Vec<String>,
cwd: Option<PathBuf>,
branch_name: Option<String>,
rows: u16,
cols: u16,
response_tx: oneshot::Sender<Result<SessionId, SessionError>>,
},
Terminate {
id: SessionId,
response_tx: oneshot::Sender<Result<(), SessionError>>,
},
SendInput {
id: SessionId,
data: Vec<u8>,
},
Resize {
id: SessionId,
rows: u16,
cols: u16,
},
List {
response_tx: oneshot::Sender<Vec<crate::session::Session>>,
},
CreateFromWorktree {
worktree_path: PathBuf,
cmd: String,
args: Vec<String>,
rows: u16,
cols: u16,
response_tx: oneshot::Sender<Result<SessionId, SessionError>>,
},
ListWorktrees {
response_tx: oneshot::Sender<Vec<crate::worktree::WorktreeInfo>>,
},
DeleteWorktree {
path: PathBuf,
response_tx: oneshot::Sender<Result<(), SessionError>>,
},
PullWorktree {
path: PathBuf,
response_tx: oneshot::Sender<Result<(), SessionError>>,
},
FetchWorktree {
path: PathBuf,
response_tx: oneshot::Sender<Result<(), SessionError>>,
},
GetWorktreeStatus {
path: PathBuf,
response_tx: oneshot::Sender<Result<crate::worktree::GitWorktreeStatus, SessionError>>,
},
RefreshWorktreesAsync,
DeleteWorktreeAsync {
path: PathBuf,
},
PullWorktreeAsync {
path: PathBuf,
},
CloseSession {
id: SessionId,
response_tx: oneshot::Sender<Result<Option<PathBuf>, SessionError>>,
},
CreateWithAutoInput {
cmd: String,
args: Vec<String>,
cwd: Option<PathBuf>,
branch_name: Option<String>,
rows: u16,
cols: u16,
auto_input: Vec<AutoInputStep>,
response_tx: oneshot::Sender<Result<SessionId, SessionError>>,
},
FetchIssuesAsync,
GenerateIssueActions {
issue_number: u32,
},
FetchCostAsync,
}