Skip to main content

objectiveai_cli/command/tools/
list.rs

1//! `tools list` — bare-naked streaming handler stub. Emits one
2//! `ResponseItem` per installed tool.
3
4use std::pin::Pin;
5
6use futures::Stream;
7use objectiveai_sdk::cli::command::tools::list::{Request, ResponseItem};
8
9use crate::context::Context;
10use crate::error::Error;
11
12type ItemStream = Pin<Box<dyn Stream<Item = Result<ResponseItem, Error>> + Send>>;
13
14pub async fn execute(ctx: &Context, request: Request) -> Result<ItemStream, Error> {
15    let offset = request.offset.unwrap_or(0);
16    let limit = request.limit.unwrap_or(usize::MAX);
17    let fs = ctx.filesystem.clone();
18    let stream = async_stream::stream! {
19        let manifests = fs.list_tools(offset, limit).await;
20        for m in manifests {
21            yield Ok(ResponseItem::from(m));
22        }
23    };
24    Ok(Box::pin(stream))
25}
26
27pub mod request_schema {
28    use objectiveai_sdk::cli::command::tools::list as sdk;
29    use objectiveai_sdk::cli::command::tools::list::request_schema::{Request, Response};
30
31    use crate::context::Context;
32    use crate::error::Error;
33
34    pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
35        Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::Request)))
36    }
37}
38
39pub mod response_schema {
40    use objectiveai_sdk::cli::command::tools::list as sdk;
41    use objectiveai_sdk::cli::command::tools::list::response_schema::{Request, Response};
42
43    use crate::context::Context;
44    use crate::error::Error;
45
46    pub async fn execute(_ctx: &Context, _request: Request) -> Result<Response, Error> {
47        Ok(objectiveai_sdk::cli::command::ResponseSchema(schemars::schema_for!(sdk::ResponseItem)))
48    }
49}