use std::collections::HashSet;
use objectiveai_sdk::cli::command::kill_all::{Request, Response};
use crate::context::Context;
use crate::error::Error;
pub async fn execute(ctx: &Context, _request: Request) -> Result<Response, Error> {
let dir = ctx.filesystem.dir().clone();
let me = std::process::id();
let mut killed: HashSet<u32> = HashSet::new();
for _ in 0..2 {
let pids = objectiveai_sdk::lockfile::owners_in_tree(&dir)
.await
.map_err(|e| Error::Spawn("read lock owners in tree".to_string(), e))?;
for pid in pids {
if pid == me || pid == 0 {
continue;
}
if crate::spawn::kill_pid(pid) == 1 {
killed.insert(pid);
}
}
}
Ok(Response { killed: killed.len() })
}
pub mod request_schema {
use objectiveai_sdk::cli::command::kill_all as sdk;
use objectiveai_sdk::cli::command::kill_all::request_schema::{Request, Response};
use crate::context::Context;
use crate::error::Error;
pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::Request)))
}
}
pub mod response_schema {
use objectiveai_sdk::cli::command::kill_all as sdk;
use objectiveai_sdk::cli::command::kill_all::response_schema::{Request, Response};
use crate::context::Context;
use crate::error::Error;
pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::Response)))
}
}