feat: used acp agent capabilities for local Inference support check (#9996)

This commit is contained in:
Lifei Zhou
2026-06-26 09:12:22 +10:00
committed by GitHub
parent 854fed5e5d
commit 3c62892d1d
13 changed files with 132 additions and 132 deletions
-1
View File
@@ -13,7 +13,6 @@ pub async fn check_token(
next: Next,
) -> Result<Response, StatusCode> {
if request.uri().path() == "/status"
|| request.uri().path() == "/features"
|| request.uri().path() == "/mcp-ui-proxy"
|| request.uri().path() == "/mcp-app-proxy"
|| request.uri().path() == "/mcp-app-guest"
-2
View File
@@ -473,7 +473,6 @@ derive_utoipa!(IconTheme as IconThemeSchema);
super::routes::telemetry::send_telemetry_event,
super::routes::dictation::transcribe_dictation,
super::routes::dictation::get_dictation_config,
super::routes::features::get_features,
),
components(schemas(
super::routes::config_management::UpsertConfigQuery,
@@ -654,7 +653,6 @@ derive_utoipa!(IconTheme as IconThemeSchema);
super::routes::dictation::TranscribeResponse,
goose::dictation::providers::DictationProvider,
super::routes::dictation::DictationProviderStatus,
super::routes::features::FeaturesResponse,
DownloadProgress,
DownloadStatus,
))
@@ -1,33 +0,0 @@
use axum::{routing::get, Json, Router};
use serde::Serialize;
use std::collections::HashMap;
use utoipa::ToSchema;
#[derive(Serialize, ToSchema)]
pub struct FeaturesResponse {
/// Map of feature name to enabled status
pub features: HashMap<String, bool>,
}
#[utoipa::path(
get,
path = "/features",
responses(
(status = 200, description = "Compile-time feature flags", body = FeaturesResponse),
)
)]
pub async fn get_features() -> Json<FeaturesResponse> {
let mut features = HashMap::new();
features.insert(
"local-inference".to_string(),
cfg!(feature = "local-inference"),
);
features.insert("code-mode".to_string(), cfg!(feature = "code-mode"));
Json(FeaturesResponse { features })
}
pub fn routes() -> Router {
Router::new().route("/features", get(get_features))
}
+1 -3
View File
@@ -3,7 +3,6 @@ pub mod agent;
pub mod config_management;
pub mod dictation;
pub mod errors;
pub mod features;
#[cfg(feature = "local-inference")]
pub mod local_inference;
pub mod mcp_app_proxy;
@@ -45,8 +44,7 @@ pub fn configure(state: Arc<crate::state::AppState>, secret_key: String) -> Rout
.merge(mcp_app_proxy::routes(secret_key))
.merge(session_events::routes(state.clone()))
.merge(sampling::routes(state.clone()))
.merge(dictation::routes(state.clone()))
.merge(features::routes());
.merge(dictation::routes(state.clone()));
#[cfg(feature = "local-inference")]
let router = router.merge(local_inference::routes(state));
+17 -1
View File
@@ -257,6 +257,21 @@ fn meta_string(
Ok(Some(value.to_string()))
}
fn agent_capabilities_meta() -> Option<Meta> {
let mut goose = serde_json::Map::new();
if cfg!(feature = "local-inference") {
goose.insert("localInference".to_string(), serde_json::json!({}));
}
if goose.is_empty() {
return None;
}
let mut meta = serde_json::Map::new();
meta.insert("goose".to_string(), serde_json::Value::Object(goose));
Some(meta)
}
fn spawn_session_name_update_notifier(
cx: ConnectionTo<Client>,
) -> tokio::sync::mpsc::UnboundedSender<crate::session::SessionNameUpdate> {
@@ -2206,7 +2221,8 @@ impl GooseAcpAgent {
.audio(false)
.embedded_context(true),
)
.mcp_capabilities(McpCapabilities::new().http(true));
.mcp_capabilities(McpCapabilities::new().http(true))
.meta(agent_capabilities_meta());
Ok(InitializeResponse::new(args.protocol_version)
.agent_info(Implementation::new("goose", env!("CARGO_PKG_VERSION")))
.agent_capabilities(capabilities)