adk_server/rest/controllers/
apps.rs

1use crate::ServerConfig;
2use axum::{
3    extract::{Query, State},
4    http::StatusCode,
5    Json,
6};
7use serde::{Deserialize, Serialize};
8
9#[derive(Clone)]
10pub struct AppsController {
11    config: ServerConfig,
12}
13
14impl AppsController {
15    pub fn new(config: ServerConfig) -> Self {
16        Self { config }
17    }
18}
19
20/// Response format for /api/apps - simple list of agent names
21pub async fn list_apps(
22    State(controller): State<AppsController>,
23) -> Result<Json<Vec<String>>, StatusCode> {
24    let apps = controller.config.agent_loader.list_agents();
25    Ok(Json(apps))
26}
27
28/// Query params for /api/list-apps (adk-go compatible)
29#[derive(Debug, Deserialize)]
30pub struct ListAppsQuery {
31    #[serde(default)]
32    pub relative_path: Option<String>,
33}
34
35/// App info returned by /api/list-apps (adk-go compatible format)
36#[derive(Debug, Serialize)]
37pub struct AppInfo {
38    pub name: String,
39    pub description: String,
40}
41
42/// Response format for /api/list-apps (adk-go compatible)
43/// Returns just the agent names as strings - the frontend expects this format
44pub async fn list_apps_compat(
45    State(controller): State<AppsController>,
46    Query(_query): Query<ListAppsQuery>,
47) -> Result<Json<Vec<String>>, StatusCode> {
48    let apps = controller.config.agent_loader.list_agents();
49    Ok(Json(apps))
50}