acp: Migrate session/delete to the standard acp sdk (#11286)
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": [
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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<()> {
|
||||
|
||||
@@ -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
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user