feat(tui): add extension management screen (#8536)
This commit is contained in:
@@ -35,6 +35,11 @@
|
||||
"requestType": "GetExtensionsRequest",
|
||||
"responseType": "GetExtensionsResponse"
|
||||
},
|
||||
{
|
||||
"method": "_goose/session/extensions",
|
||||
"requestType": "GetSessionExtensionsRequest",
|
||||
"responseType": "GetSessionExtensionsResponse"
|
||||
},
|
||||
{
|
||||
"method": "_goose/session/provider/update",
|
||||
"requestType": "UpdateProviderRequest",
|
||||
|
||||
@@ -168,6 +168,33 @@
|
||||
"x-side": "agent",
|
||||
"x-method": "_goose/config/extensions"
|
||||
},
|
||||
"GetSessionExtensionsRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"sessionId": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"sessionId"
|
||||
],
|
||||
"x-side": "agent",
|
||||
"x-method": "_goose/session/extensions"
|
||||
},
|
||||
"GetSessionExtensionsResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"items": {}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"extensions"
|
||||
],
|
||||
"x-side": "agent",
|
||||
"x-method": "_goose/session/extensions"
|
||||
},
|
||||
"UpdateProviderRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -710,6 +737,15 @@
|
||||
"description": "Params for _goose/config/extensions",
|
||||
"title": "GetExtensionsRequest"
|
||||
},
|
||||
{
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/GetSessionExtensionsRequest"
|
||||
}
|
||||
],
|
||||
"description": "Params for _goose/session/extensions",
|
||||
"title": "GetSessionExtensionsRequest"
|
||||
},
|
||||
{
|
||||
"allOf": [
|
||||
{
|
||||
@@ -898,6 +934,14 @@
|
||||
],
|
||||
"title": "GetExtensionsResponse"
|
||||
},
|
||||
{
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/GetSessionExtensionsResponse"
|
||||
}
|
||||
],
|
||||
"title": "GetSessionExtensionsResponse"
|
||||
},
|
||||
{
|
||||
"allOf": [
|
||||
{
|
||||
|
||||
@@ -2291,6 +2291,34 @@ impl GooseAcpAgent {
|
||||
})
|
||||
}
|
||||
|
||||
#[custom_method(GetSessionExtensionsRequest)]
|
||||
async fn on_get_session_extensions(
|
||||
&self,
|
||||
req: GetSessionExtensionsRequest,
|
||||
) -> Result<GetSessionExtensionsResponse, sacp::Error> {
|
||||
let internal_id = self.internal_session_id(&req.session_id).await?;
|
||||
let session = self
|
||||
.session_manager
|
||||
.get_session(&internal_id, false)
|
||||
.await
|
||||
.map_err(|e| sacp::Error::internal_error().data(e.to_string()))?;
|
||||
|
||||
let extensions = EnabledExtensionsState::extensions_or_default(
|
||||
Some(&session.extension_data),
|
||||
goose::config::Config::global(),
|
||||
);
|
||||
|
||||
let extensions_json = extensions
|
||||
.into_iter()
|
||||
.map(|e| serde_json::to_value(&e))
|
||||
.collect::<Result<Vec<_>, _>>()
|
||||
.map_err(|e| sacp::Error::internal_error().data(e.to_string()))?;
|
||||
|
||||
Ok(GetSessionExtensionsResponse {
|
||||
extensions: extensions_json,
|
||||
})
|
||||
}
|
||||
|
||||
#[custom_method(UpdateProviderRequest)]
|
||||
async fn on_update_provider(
|
||||
&self,
|
||||
|
||||
@@ -104,6 +104,18 @@ pub struct GetExtensionsResponse {
|
||||
pub warnings: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
|
||||
#[request(method = "_goose/session/extensions", response = GetSessionExtensionsResponse)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct GetSessionExtensionsRequest {
|
||||
pub session_id: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
|
||||
pub struct GetSessionExtensionsResponse {
|
||||
pub extensions: Vec<serde_json::Value>,
|
||||
}
|
||||
|
||||
/// Atomically update the provider for a live session.
|
||||
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
|
||||
#[request(method = "_goose/session/provider/update", response = UpdateProviderResponse)]
|
||||
|
||||
Reference in New Issue
Block a user