use std::collections::BTreeMap;
use std::pin::Pin;
use futures::Stream;
use objectiveai_sdk::cli::command::agents::instances::get::{Request, ResponseItem};
use crate::context::Context;
use crate::error::Error;
type ItemStream = Pin<Box<dyn Stream<Item = Result<ResponseItem, Error>> + Send>>;
pub async fn execute(ctx: &Context, request: Request) -> Result<ItemStream, Error> {
let default_parent = ctx.config.agent_instance_hierarchy.clone();
let mut aihs: Vec<String> = Vec::new();
for target in request.targets {
if let Some(aih) = super::resolve_target(&ctx.db, target, &default_parent).await? {
if !aihs.contains(&aih) {
aihs.push(aih);
}
}
}
let mut merged: BTreeMap<String, ResponseItem> = BTreeMap::new();
for aih in aihs {
let item = crate::db::instances::get_exact(&ctx.db, &aih).await?;
merged.insert(item.agent_instance_hierarchy.clone(), item);
}
let items: Vec<Result<ResponseItem, Error>> =
merged.into_values().map(Ok).collect();
Ok(Box::pin(futures::stream::iter(items)))
}
pub mod request_schema {
use objectiveai_sdk::cli::command::agents::instances::get as sdk;
use objectiveai_sdk::cli::command::agents::instances::get::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::agents::instances::get as sdk;
use objectiveai_sdk::cli::command::agents::instances::get::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::ResponseItem)))
}
}