acp: Migrate session/delete to the standard acp sdk (#11286)

This commit is contained in:
Lifei Zhou
2026-08-17 10:09:56 +00:00
committed by GitHub
parent 85aac19404
commit 063694cf76
13 changed files with 59 additions and 103 deletions
@@ -323,14 +323,6 @@ pub struct PromptOperationResponse {
pub message: String,
}
/// Delete a session.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(method = "session/delete", response = EmptyResponse)]
#[serde(rename_all = "camelCase")]
pub struct DeleteSessionRequest {
pub session_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum GooseExtension {
-5
View File
@@ -90,11 +90,6 @@
"requestType": "ResetPromptRequest_unstable",
"responseType": "PromptOperationResponse_unstable"
},
{
"method": "session/delete",
"requestType": "DeleteSessionRequest",
"responseType": "EmptyResponse"
},
{
"method": "_goose/unstable/config/extensions/list",
"requestType": "GetConfigExtensionsRequest_unstable",
-23
View File
@@ -1506,20 +1506,6 @@
"x-side": "agent",
"x-method": "_goose/unstable/config/prompts/reset"
},
"DeleteSessionRequest": {
"type": "object",
"properties": {
"sessionId": {
"type": "string"
}
},
"required": [
"sessionId"
],
"description": "Delete a session.",
"x-side": "agent",
"x-method": "session/delete"
},
"GetConfigExtensionsRequest_unstable": {
"type": "object",
"description": "List configured extensions and any warnings.",
@@ -7200,15 +7186,6 @@
"description": "Params for _goose/unstable/config/prompts/reset",
"title": "ResetPromptRequest_unstable"
},
{
"allOf": [
{
"$ref": "#/$defs/DeleteSessionRequest"
}
],
"description": "Params for session/delete",
"title": "DeleteSessionRequest"
},
{
"allOf": [
{
+9 -7
View File
@@ -41,13 +41,14 @@ use crate::utils::sanitize_unicode_tags;
use agent_client_protocol::schema::v1::{
AgentCapabilities, Annotations, AuthMethod, AuthMethodAgent, AuthenticateRequest,
AuthenticateResponse, CancelNotification, CloseSessionRequest, CloseSessionResponse,
ConfigOptionUpdate, ContentBlock, Cost, CurrentModeUpdate, EmbeddedResourceResource,
FileSystemCapabilities, ForkSessionRequest, ForkSessionResponse, ImageContent, Implementation,
InitializeRequest, InitializeResponse, ListSessionsRequest, ListSessionsResponse,
LoadSessionRequest, LoadSessionResponse, McpCapabilities, McpServer, Meta, NewSessionRequest,
NewSessionResponse, PermissionOption, PermissionOptionKind, PromptCapabilities, PromptRequest,
PromptResponse, RequestPermissionOutcome, RequestPermissionRequest, ResourceLink,
SessionCapabilities, SessionCloseCapabilities, SessionConfigOption, SessionId,
ConfigOptionUpdate, ContentBlock, Cost, CurrentModeUpdate, DeleteSessionRequest,
DeleteSessionResponse, EmbeddedResourceResource, FileSystemCapabilities, ForkSessionRequest,
ForkSessionResponse, ImageContent, Implementation, InitializeRequest, InitializeResponse,
ListSessionsRequest, ListSessionsResponse, LoadSessionRequest, LoadSessionResponse,
McpCapabilities, McpServer, Meta, NewSessionRequest, NewSessionResponse, PermissionOption,
PermissionOptionKind, PromptCapabilities, PromptRequest, PromptResponse,
RequestPermissionOutcome, RequestPermissionRequest, ResourceLink, SessionCapabilities,
SessionCloseCapabilities, SessionConfigOption, SessionDeleteCapabilities, SessionId,
SessionInfoUpdate, SessionListCapabilities, SessionNotification, SessionUpdate,
SetSessionConfigOptionRequest, SetSessionConfigOptionResponse, SetSessionModeRequest,
SetSessionModeResponse, StopReason, TextContent, ToolCallId, ToolCallUpdate, Usage,
@@ -1527,6 +1528,7 @@ impl GooseAcpAgent {
.session_capabilities(
SessionCapabilities::new()
.list(SessionListCapabilities::new())
.delete(SessionDeleteCapabilities::new())
.close(SessionCloseCapabilities::new()),
)
.prompt_capabilities(
@@ -173,14 +173,6 @@ impl GooseAcpAgent {
self.on_reset_prompt(req).await
}
#[custom_method(DeleteSessionRequest)]
async fn dispatch_delete_session(
&self,
req: DeleteSessionRequest,
) -> Result<EmptyResponse, agent_client_protocol::Error> {
self.on_delete_session(req).await
}
#[custom_method(GetConfigExtensionsRequest)]
async fn dispatch_get_config_extensions(
&self,
+15
View File
@@ -380,6 +380,21 @@ impl HandleDispatchFrom<Client> for GooseAcpHandler {
}
})
.await
.if_request({
let agent = agent.clone();
let cx = cx.clone();
|req: DeleteSessionRequest, responder: Responder<DeleteSessionResponse>| async move {
cx.spawn(async move {
match agent.on_delete_session(req).await {
Ok(response) => responder.respond(response)?,
Err(e) => responder.respond_with_error(e)?,
}
Ok(())
})?;
Ok(())
}
})
.await
.if_request({
let agent = agent.clone();
let cx = cx.clone();
@@ -98,17 +98,18 @@ impl GooseAcpAgent {
pub(super) async fn on_delete_session(
&self,
req: DeleteSessionRequest,
) -> Result<EmptyResponse, agent_client_protocol::Error> {
) -> Result<DeleteSessionResponse, agent_client_protocol::Error> {
let session_id = req.session_id.0.to_string();
self.session_manager
.delete_session(&req.session_id)
.delete_session(&session_id)
.await
.internal_err()?;
self.sessions.lock().await.remove(&req.session_id);
self.sessions.lock().await.remove(&session_id);
self.agent_manager
.remove_session_if_loaded(&req.session_id)
.remove_session_if_loaded(&session_id)
.await
.internal_err_ctx("Failed to remove in-memory agent")?;
Ok(EmptyResponse {})
Ok(DeleteSessionResponse::new())
}
pub(super) async fn on_export_session(
+6 -5
View File
@@ -7,6 +7,8 @@ use std::env;
use std::fs;
use std::path::PathBuf;
const STABLE_SCHEMA_TYPE_NAMES: &[&str] = &["EmptyResponse"];
fn main() {
let mut generator = SchemaGenerator::default();
let methods = GooseAcpAgent::custom_method_schemas(&mut generator);
@@ -57,11 +59,10 @@ fn main() {
let unstable_type_names: BTreeSet<String> = type_methods
.iter()
.filter_map(|(name, methods_list)| {
if methods_list.iter().all(|method| is_unstable_method(method)) {
Some(name.clone())
} else {
None
}
let is_unstable = methods_list.iter().all(|method| is_unstable_method(method));
let has_stable_name = STABLE_SCHEMA_TYPE_NAMES.contains(&name.as_str());
(is_unstable && !has_stable_name).then(|| name.clone())
})
.collect();
+21 -15
View File
@@ -4,13 +4,13 @@ use super::{
};
use agent_client_protocol::schema::v1::{
ClientCapabilities, CloseSessionRequest, ContentBlock, CreateTerminalRequest,
FileSystemCapabilities, ImageContent, InitializeRequest, KillTerminalRequest,
ListSessionsRequest, ListSessionsResponse, LoadSessionRequest, McpServer, NewSessionRequest,
PromptRequest, ReadTextFileRequest, ReleaseTerminalRequest, RequestPermissionRequest,
SessionConfigKind, SessionConfigOptionCategory, SessionConfigOptionValue, SessionId,
SessionModeId, SessionNotification, SessionUpdate, SetSessionConfigOptionRequest,
SetSessionModeRequest, StopReason, TerminalOutputRequest, TextContent, ToolCallStatus,
WaitForTerminalExitRequest, WriteTextFileRequest,
DeleteSessionRequest, FileSystemCapabilities, ImageContent, InitializeRequest,
KillTerminalRequest, ListSessionsRequest, ListSessionsResponse, LoadSessionRequest, McpServer,
NewSessionRequest, PromptRequest, ReadTextFileRequest, ReleaseTerminalRequest,
RequestPermissionRequest, SessionConfigKind, SessionConfigOptionCategory,
SessionConfigOptionValue, SessionId, SessionModeId, SessionNotification, SessionUpdate,
SetSessionConfigOptionRequest, SetSessionModeRequest, StopReason, TerminalOutputRequest,
TextContent, ToolCallStatus, WaitForTerminalExitRequest, WriteTextFileRequest,
};
use agent_client_protocol::schema::ProtocolVersion;
use agent_client_protocol::{Agent, Client, ConnectionTo};
@@ -361,6 +361,14 @@ impl Connection for AcpServerConnection {
Some("goose"),
"initialize response must identify the agent"
);
assert!(
resp.agent_capabilities
.session_capabilities
.delete
.as_ref()
.is_some(),
"initialize response must advertise session/delete"
);
*cx_holder.lock().unwrap() = Some(cx.clone());
let _ = ready_tx.send(());
@@ -486,14 +494,12 @@ impl Connection for AcpServerConnection {
}
async fn delete_session(&self, session_id: &str) -> anyhow::Result<()> {
super::send_custom(
&self.cx,
"session/delete",
serde_json::json!({ "sessionId": session_id }),
)
.await
.map(|_| ())
.map_err(|e| e.into())
self.cx
.send_request(DeleteSessionRequest::new(SessionId::new(session_id)))
.block_task()
.await
.map(|_| ())
.map_err(|e| e.into())
}
async fn set_mode(&self, session_id: &str, mode_id: &str) -> anyhow::Result<()> {
-5
View File
@@ -41,7 +41,6 @@ import type {
DefaultsSaveRequest_unstable,
DeleteRecipeRequest_unstable,
DeleteScheduleRequest_unstable,
DeleteSessionRequest,
DeleteSourceRequest_unstable,
DiagnosticsGetRequest_unstable,
DiagnosticsGetResponse_unstable,
@@ -450,10 +449,6 @@ export class GooseExtClient {
) as PromptOperationResponse_unstable;
}
async sessionDelete(params: DeleteSessionRequest): Promise<void> {
await this.conn.request("session/delete", params);
}
async configExtensionsList_unstable(
params: GetConfigExtensionsRequest_unstable,
): Promise<GetConfigExtensionsResponse_unstable> {
File diff suppressed because one or more lines are too long
+1 -8
View File
@@ -778,13 +778,6 @@ export type ResetPromptRequest_unstable = {
name: string;
};
/**
* Delete a session.
*/
export type DeleteSessionRequest = {
sessionId: string;
};
/**
* List configured extensions and any warnings.
*/
@@ -2698,7 +2691,7 @@ export type RecipeParamsAction = 'submit' | 'cancel';
export type ExtRequest = {
id: string;
method: string;
params?: AddSessionExtensionRequest_unstable | RemoveSessionExtensionRequest_unstable | GetToolsRequest_unstable | SetToolPermissionsRequest_unstable | GooseToolCallRequest_unstable | ReadResourceRequest_unstable | AppsListRequest_unstable | AppsExportRequest_unstable | AppsImportRequest_unstable | AppsDeleteRequest_unstable | UpdateWorkingDirRequest_unstable | SetSessionSystemPromptRequest_unstable | SteerSessionRequest_unstable | DiagnosticsGetRequest_unstable | ListPromptsRequest_unstable | GetPromptRequest_unstable | SavePromptRequest_unstable | ResetPromptRequest_unstable | DeleteSessionRequest | GetConfigExtensionsRequest_unstable | GetAvailableExtensionsRequest_unstable | AddConfigExtensionRequest_unstable | RemoveConfigExtensionRequest_unstable | SetConfigExtensionEnabledRequest_unstable | GetSessionExtensionsRequest_unstable | ListProvidersRequest_unstable | ProviderSupportedModelsListRequest_unstable | ProviderCatalogListRequest_unstable | ProviderSetupCatalogListRequest_unstable | ProviderCatalogTemplateRequest_unstable | CustomProviderCreateRequest_unstable | CustomProviderReadRequest_unstable | CustomProviderUpdateRequest_unstable | CustomProviderDeleteRequest_unstable | RefreshProviderInventoryRequest_unstable | ProviderReadinessCheckRequest_unstable | ProviderConfigReadRequest_unstable | ProviderConfigStatusRequest_unstable | ProviderConfigSaveRequest_unstable | ProviderConfigDeleteRequest_unstable | ProviderConfigAuthenticateRequest_unstable | ProviderSecretsListRequest_unstable | ProviderSecretDeleteRequest_unstable | CanonicalModelInfoRequest_unstable | PreferencesReadRequest_unstable | PreferencesSaveRequest_unstable | PreferencesRemoveRequest_unstable | ConfigReadRequest_unstable | ConfigUpsertRequest_unstable | ConfigRemoveRequest_unstable | ConfigReadAllRequest_unstable | DefaultsReadRequest_unstable | DefaultsSaveRequest_unstable | DefaultsClearRequest_unstable | OnboardingImportScanRequest_unstable | OnboardingImportApplyRequest_unstable | ExportSessionRequest_unstable | ImportSessionRequest_unstable | ShareSessionNostrRequest_unstable | EncodeRecipeRequest_unstable | DecodeRecipeRequest_unstable | ScanRecipeRequest_unstable | ListRecipesRequest_unstable | DeleteRecipeRequest_unstable | ScheduleRecipeRequest_unstable | SetRecipeSlashCommandRequest_unstable | SaveRecipeRequest_unstable | ParseRecipeRequest_unstable | RecipeToYamlRequest_unstable | ListSchedulesRequest_unstable | ListScheduleSessionsRequest_unstable | CreateScheduleRequest_unstable | DeleteScheduleRequest_unstable | PauseScheduleRequest_unstable | UnpauseScheduleRequest_unstable | UpdateScheduleRequest_unstable | RunScheduleNowRequest_unstable | KillRunningJobRequest_unstable | InspectRunningJobRequest_unstable | GetSessionInfoRequest_unstable | TruncateSessionConversationRequest_unstable | UpdateSessionProjectRequest_unstable | RenameSessionRequest_unstable | ArchiveSessionRequest_unstable | UnarchiveSessionRequest_unstable | CreateSourceRequest_unstable | ListSourcesRequest_unstable | ListAgentMentionsRequest_unstable | ListSlashCommandsRequest_unstable | UpdateSourceRequest_unstable | DeleteSourceRequest_unstable | ExportSourceRequest_unstable | ImportSourcesRequest_unstable | DictationTranscribeRequest_unstable | DictationConfigRequest_unstable | DictationSecretSaveRequest_unstable | DictationSecretDeleteRequest_unstable | DictationModelsListRequest_unstable | DictationModelDownloadRequest_unstable | DictationModelDownloadProgressRequest_unstable | DictationModelCancelRequest_unstable | DictationModelDeleteRequest_unstable | DictationModelSelectRequest_unstable | LocalInferenceModelsListRequest_unstable | LocalInferenceModelDownloadRequest_unstable | LocalInferenceModelDownloadProgressRequest_unstable | LocalInferenceModelDownloadCancelRequest_unstable | LocalInferenceModelDeleteRequest_unstable | LocalInferenceModelEvictRequest_unstable | LocalInferenceModelSettingsReadRequest_unstable | LocalInferenceModelSettingsUpdateRequest_unstable | LocalInferenceHuggingFaceSearchRequest_unstable | LocalInferenceHuggingFaceRepoVariantsRequest_unstable | LocalInferenceBuiltinChatTemplatesListRequest_unstable | {
params?: AddSessionExtensionRequest_unstable | RemoveSessionExtensionRequest_unstable | GetToolsRequest_unstable | SetToolPermissionsRequest_unstable | GooseToolCallRequest_unstable | ReadResourceRequest_unstable | AppsListRequest_unstable | AppsExportRequest_unstable | AppsImportRequest_unstable | AppsDeleteRequest_unstable | UpdateWorkingDirRequest_unstable | SetSessionSystemPromptRequest_unstable | SteerSessionRequest_unstable | DiagnosticsGetRequest_unstable | ListPromptsRequest_unstable | GetPromptRequest_unstable | SavePromptRequest_unstable | ResetPromptRequest_unstable | GetConfigExtensionsRequest_unstable | GetAvailableExtensionsRequest_unstable | AddConfigExtensionRequest_unstable | RemoveConfigExtensionRequest_unstable | SetConfigExtensionEnabledRequest_unstable | GetSessionExtensionsRequest_unstable | ListProvidersRequest_unstable | ProviderSupportedModelsListRequest_unstable | ProviderCatalogListRequest_unstable | ProviderSetupCatalogListRequest_unstable | ProviderCatalogTemplateRequest_unstable | CustomProviderCreateRequest_unstable | CustomProviderReadRequest_unstable | CustomProviderUpdateRequest_unstable | CustomProviderDeleteRequest_unstable | RefreshProviderInventoryRequest_unstable | ProviderReadinessCheckRequest_unstable | ProviderConfigReadRequest_unstable | ProviderConfigStatusRequest_unstable | ProviderConfigSaveRequest_unstable | ProviderConfigDeleteRequest_unstable | ProviderConfigAuthenticateRequest_unstable | ProviderSecretsListRequest_unstable | ProviderSecretDeleteRequest_unstable | CanonicalModelInfoRequest_unstable | PreferencesReadRequest_unstable | PreferencesSaveRequest_unstable | PreferencesRemoveRequest_unstable | ConfigReadRequest_unstable | ConfigUpsertRequest_unstable | ConfigRemoveRequest_unstable | ConfigReadAllRequest_unstable | DefaultsReadRequest_unstable | DefaultsSaveRequest_unstable | DefaultsClearRequest_unstable | OnboardingImportScanRequest_unstable | OnboardingImportApplyRequest_unstable | ExportSessionRequest_unstable | ImportSessionRequest_unstable | ShareSessionNostrRequest_unstable | EncodeRecipeRequest_unstable | DecodeRecipeRequest_unstable | ScanRecipeRequest_unstable | ListRecipesRequest_unstable | DeleteRecipeRequest_unstable | ScheduleRecipeRequest_unstable | SetRecipeSlashCommandRequest_unstable | SaveRecipeRequest_unstable | ParseRecipeRequest_unstable | RecipeToYamlRequest_unstable | ListSchedulesRequest_unstable | ListScheduleSessionsRequest_unstable | CreateScheduleRequest_unstable | DeleteScheduleRequest_unstable | PauseScheduleRequest_unstable | UnpauseScheduleRequest_unstable | UpdateScheduleRequest_unstable | RunScheduleNowRequest_unstable | KillRunningJobRequest_unstable | InspectRunningJobRequest_unstable | GetSessionInfoRequest_unstable | TruncateSessionConversationRequest_unstable | UpdateSessionProjectRequest_unstable | RenameSessionRequest_unstable | ArchiveSessionRequest_unstable | UnarchiveSessionRequest_unstable | CreateSourceRequest_unstable | ListSourcesRequest_unstable | ListAgentMentionsRequest_unstable | ListSlashCommandsRequest_unstable | UpdateSourceRequest_unstable | DeleteSourceRequest_unstable | ExportSourceRequest_unstable | ImportSourcesRequest_unstable | DictationTranscribeRequest_unstable | DictationConfigRequest_unstable | DictationSecretSaveRequest_unstable | DictationSecretDeleteRequest_unstable | DictationModelsListRequest_unstable | DictationModelDownloadRequest_unstable | DictationModelDownloadProgressRequest_unstable | DictationModelCancelRequest_unstable | DictationModelDeleteRequest_unstable | DictationModelSelectRequest_unstable | LocalInferenceModelsListRequest_unstable | LocalInferenceModelDownloadRequest_unstable | LocalInferenceModelDownloadProgressRequest_unstable | LocalInferenceModelDownloadCancelRequest_unstable | LocalInferenceModelDeleteRequest_unstable | LocalInferenceModelEvictRequest_unstable | LocalInferenceModelSettingsReadRequest_unstable | LocalInferenceModelSettingsUpdateRequest_unstable | LocalInferenceHuggingFaceSearchRequest_unstable | LocalInferenceHuggingFaceRepoVariantsRequest_unstable | LocalInferenceBuiltinChatTemplatesListRequest_unstable | {
[key: string]: unknown;
} | null;
};
-8
View File
@@ -664,13 +664,6 @@ export const zResetPromptRequest_unstable = z.object({
name: z.string()
});
/**
* Delete a session.
*/
export const zDeleteSessionRequest = z.object({
sessionId: z.string()
});
/**
* List configured extensions and any warnings.
*/
@@ -2891,7 +2884,6 @@ export const zExtRequest = z.object({
zGetPromptRequest_unstable,
zSavePromptRequest_unstable,
zResetPromptRequest_unstable,
zDeleteSessionRequest,
zGetConfigExtensionsRequest_unstable,
zGetAvailableExtensionsRequest_unstable,
zAddConfigExtensionRequest_unstable,