use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TrustyCommand {
Sessions,
Status {
session_id: String,
},
Approve {
session_id: String,
},
Deny {
session_id: String,
},
Overseer,
Tmux,
Projects,
Discover,
Adopt {
session: String,
},
Config {
project: String,
},
Snapshot {
session: String,
},
Kill {
session_id: String,
},
Alerts,
Pair {
code: Option<String>,
},
Send {
session: String,
prompt: String,
},
Launch {
project: PathBuf,
session_name: Option<String>,
},
Connect {
project: PathBuf,
session_name: Option<String>,
},
Start,
Doctor,
CoordinatorChat {
message: String,
},
ManagedNew {
repo_url: String,
git_ref: String,
task: String,
name_hint: Option<String>,
runtime: Option<String>,
inject_task: Option<bool>,
deliverable_id: Option<String>,
force_new: bool,
},
ManagedList,
ManagedFleet,
ManagedGet {
target: String,
},
ManagedSend {
target: String,
text: String,
},
ManagedAnswer {
target: String,
answer: String,
},
ManagedActivity {
target: String,
},
ManagedAttachCmd {
target: String,
},
ManagedRuntimeStop {
target: String,
},
ManagedResume {
target: String,
},
ManagedDecommission {
target: String,
},
ManagedAdopt {
tmux_name: String,
cwd: String,
task: Option<String>,
runtime: Option<String>,
},
Health,
Help,
}
pub fn help_text() -> &'static str {
super::catalog::help_text()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn pair_command_distinguishes_code_and_status() {
let with_code = TrustyCommand::Pair {
code: Some("A4X9KZ".into()),
};
let status = TrustyCommand::Pair { code: None };
assert_ne!(with_code, status);
}
#[test]
fn managed_variants_round_trip_by_value() {
let spawn = TrustyCommand::ManagedNew {
repo_url: "https://example/r.git".into(),
git_ref: "main".into(),
task: "do the thing".into(),
name_hint: Some("api".into()),
runtime: Some("tcode".into()),
inject_task: None,
deliverable_id: None,
force_new: false,
};
assert_eq!(spawn.clone(), spawn);
let answer = TrustyCommand::ManagedAnswer {
target: "tmpm-red-owl".into(),
answer: "yes".into(),
};
assert_eq!(
answer,
TrustyCommand::ManagedAnswer {
target: "tmpm-red-owl".into(),
answer: "yes".into(),
}
);
assert_ne!(
TrustyCommand::ManagedResume { target: "a".into() },
TrustyCommand::ManagedRuntimeStop { target: "a".into() },
);
}
#[test]
fn help_text_is_catalog_rendered() {
let text = help_text();
assert!(text.contains("/managed-list"));
assert!(text.contains("/managed-decommission"));
assert!(text.contains("/sessions"));
}
}