From 8314ab4ee07981597186762fb789dbc739632750 Mon Sep 17 00:00:00 2001 From: "Anna.Zhdan" Date: Sun, 15 Mar 2026 10:55:38 +0100 Subject: [PATCH] initial logout method support --- acp-model/api/acp-model.api | 134 +++++++++++++++++- .../agentclientprotocol/model/Capabilities.kt | 31 ++++ .../com/agentclientprotocol/model/Methods.kt | 2 + .../com/agentclientprotocol/model/Requests.kt | 28 ++++ acp/api/acp.api | 5 + .../com/agentclientprotocol/agent/Agent.kt | 5 + .../agentclientprotocol/agent/AgentSupport.kt | 19 +++ .../com/agentclientprotocol/client/Client.kt | 15 ++ build.gradle.kts | 2 +- 9 files changed, 235 insertions(+), 6 deletions(-) diff --git a/acp-model/api/acp-model.api b/acp-model/api/acp-model.api index a0b39af..28b6143 100644 --- a/acp-model/api/acp-model.api +++ b/acp-model/api/acp-model.api @@ -51,6 +51,10 @@ public final class com/agentclientprotocol/model/AcpMethod$AgentMethods$Initiali public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$AgentMethods$Initialize; } +public final class com/agentclientprotocol/model/AcpMethod$AgentMethods$Logout : com/agentclientprotocol/model/AcpMethod$AcpRequestResponseMethod { + public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$AgentMethods$Logout; +} + public final class com/agentclientprotocol/model/AcpMethod$AgentMethods$SessionCancel : com/agentclientprotocol/model/AcpMethod$AcpSessionNotificationMethod { public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$AgentMethods$SessionCancel; } @@ -169,19 +173,52 @@ public abstract interface class com/agentclientprotocol/model/AcpWithSessionId { public abstract fun getSessionId-7EW-EgU ()Ljava/lang/String; } +public final class com/agentclientprotocol/model/AgentAuthCapabilities : com/agentclientprotocol/model/AcpWithMeta { + public static final field Companion Lcom/agentclientprotocol/model/AgentAuthCapabilities$Companion; + public fun ()V + public fun (Lcom/agentclientprotocol/model/LogoutCapabilities;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lcom/agentclientprotocol/model/LogoutCapabilities;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/LogoutCapabilities; + public final fun component2 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lcom/agentclientprotocol/model/LogoutCapabilities;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/AgentAuthCapabilities; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lcom/agentclientprotocol/model/LogoutCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/AgentAuthCapabilities; + public fun equals (Ljava/lang/Object;)Z + public final fun getLogout ()Lcom/agentclientprotocol/model/LogoutCapabilities; + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/AgentAuthCapabilities$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/AgentAuthCapabilities$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/AgentAuthCapabilities; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/AgentAuthCapabilities;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/AgentAuthCapabilities$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/AgentCapabilities : com/agentclientprotocol/model/AcpCapabilities, com/agentclientprotocol/model/AcpWithMeta { public static final field Companion Lcom/agentclientprotocol/model/AgentCapabilities$Companion; public fun ()V - public fun (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lkotlinx/serialization/json/JsonElement;)V - public synthetic fun (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Z public final fun component2 ()Lcom/agentclientprotocol/model/PromptCapabilities; public final fun component3 ()Lcom/agentclientprotocol/model/McpCapabilities; public final fun component4 ()Lcom/agentclientprotocol/model/SessionCapabilities; - public final fun component5 ()Lkotlinx/serialization/json/JsonElement; - public final fun copy (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/AgentCapabilities; - public static synthetic fun copy$default (Lcom/agentclientprotocol/model/AgentCapabilities;ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/AgentCapabilities; + public final fun component5 ()Lcom/agentclientprotocol/model/AgentAuthCapabilities; + public final fun component6 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/AgentCapabilities; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/AgentCapabilities;ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/AgentCapabilities; public fun equals (Ljava/lang/Object;)Z + public final fun getAuth ()Lcom/agentclientprotocol/model/AgentAuthCapabilities; public final fun getLoadSession ()Z public final fun getMcpCapabilities ()Lcom/agentclientprotocol/model/McpCapabilities; public final fun getPromptCapabilities ()Lcom/agentclientprotocol/model/PromptCapabilities; @@ -1552,6 +1589,93 @@ public final class com/agentclientprotocol/model/LoadSessionResponse$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/LogoutCapabilities : com/agentclientprotocol/model/AcpWithMeta { + public static final field Companion Lcom/agentclientprotocol/model/LogoutCapabilities$Companion; + public fun ()V + public fun (Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/LogoutCapabilities; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/LogoutCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/LogoutCapabilities; + public fun equals (Ljava/lang/Object;)Z + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/LogoutCapabilities$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/LogoutCapabilities$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/LogoutCapabilities; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/LogoutCapabilities;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/LogoutCapabilities$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/LogoutRequest : com/agentclientprotocol/model/AcpRequest { + public static final field Companion Lcom/agentclientprotocol/model/LogoutRequest$Companion; + public fun ()V + public fun (Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/LogoutRequest; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/LogoutRequest;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/LogoutRequest; + public fun equals (Ljava/lang/Object;)Z + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/LogoutRequest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/LogoutRequest$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/LogoutRequest; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/LogoutRequest;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/LogoutRequest$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/LogoutResponse : com/agentclientprotocol/model/AcpResponse { + public static final field Companion Lcom/agentclientprotocol/model/LogoutResponse$Companion; + public fun ()V + public fun (Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/LogoutResponse; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/LogoutResponse;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/LogoutResponse; + public fun equals (Ljava/lang/Object;)Z + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/LogoutResponse$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/LogoutResponse$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/LogoutResponse; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/LogoutResponse;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/LogoutResponse$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/McpCapabilities : com/agentclientprotocol/model/AcpWithMeta { public static final field Companion Lcom/agentclientprotocol/model/McpCapabilities$Companion; public fun ()V diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt index 3e1c77e..fc327b5 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt @@ -133,6 +133,35 @@ public data class SessionCapabilities( override val _meta: JsonElement? = null ) : AcpWithMeta +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Logout capabilities supported by the agent. + * + * By supplying `{}` it means that the agent supports the logout method. + */ +@UnstableApi +@Serializable +public data class LogoutCapabilities( + override val _meta: JsonElement? = null +) : AcpWithMeta + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Authentication-related capabilities supported by the agent. + */ +@UnstableApi +@Serializable +public data class AgentAuthCapabilities( + val logout: LogoutCapabilities? = null, + override val _meta: JsonElement? = null +) : AcpWithMeta + /** * Capabilities supported by the agent. * @@ -148,5 +177,7 @@ public data class AgentCapabilities( @EncodeDefault val promptCapabilities: PromptCapabilities = PromptCapabilities(), @EncodeDefault val mcpCapabilities: McpCapabilities = McpCapabilities(), @EncodeDefault val sessionCapabilities: SessionCapabilities = SessionCapabilities(), + @property:UnstableApi + @EncodeDefault val auth: AgentAuthCapabilities = AgentAuthCapabilities(), override val _meta: JsonElement? = null ) : AcpCapabilities, AcpWithMeta \ No newline at end of file diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt index d971e89..62b2b70 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt @@ -44,6 +44,8 @@ public open class AcpMethod(public val methodName: MethodName) { // Agent-side operations (methods that agents can call on clients) public object Initialize : AcpRequestResponseMethod("initialize", InitializeRequest.serializer(), InitializeResponse.serializer()) public object Authenticate : AcpRequestResponseMethod("authenticate", AuthenticateRequest.serializer(), AuthenticateResponse.serializer()) + @UnstableApi + public object Logout : AcpRequestResponseMethod("logout", LogoutRequest.serializer(), LogoutResponse.serializer()) public object SessionNew : AcpRequestResponseMethod("session/new", NewSessionRequest.serializer(), NewSessionResponse.serializer()) public object SessionLoad : AcpRequestResponseMethod("session/load", LoadSessionRequest.serializer(), LoadSessionResponse.serializer()) diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Requests.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Requests.kt index 5d71829..37ad05e 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Requests.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Requests.kt @@ -618,6 +618,34 @@ public data class AuthenticateResponse( override val _meta: JsonElement? = null ) : AcpResponse +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Request parameters for the logout method. + * + * Terminates the current authenticated session. + */ +@UnstableApi +@Serializable +public data class LogoutRequest( + override val _meta: JsonElement? = null +) : AcpRequest + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Response to the `logout` method. + */ +@UnstableApi +@Serializable +public data class LogoutResponse( + override val _meta: JsonElement? = null +) : AcpResponse + /** * Response to `session/set_mode` method. */ diff --git a/acp/api/acp.api b/acp/api/acp.api index e43b2c2..d5ba635 100644 --- a/acp/api/acp.api +++ b/acp/api/acp.api @@ -91,6 +91,8 @@ public abstract interface class com/agentclientprotocol/agent/AgentSupport { public static synthetic fun listSessions$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun loadSession-nk3TnMc (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun loadSession-nk3TnMc$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun logout (Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun logout$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun resumeSession-nk3TnMc (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun resumeSession-nk3TnMc$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } @@ -100,6 +102,7 @@ public final class com/agentclientprotocol/agent/AgentSupport$DefaultImpls { public static fun forkSession-nk3TnMc (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun listSessions (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun loadSession-nk3TnMc (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun logout (Lcom/agentclientprotocol/agent/AgentSupport;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun resumeSession-nk3TnMc (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } @@ -117,6 +120,8 @@ public final class com/agentclientprotocol/client/Client { public final fun listSessions (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)Lkotlinx/coroutines/flow/Flow; public static synthetic fun listSessions$default (Lcom/agentclientprotocol/client/Client;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; public final fun loadSession-wPMwmcM (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lcom/agentclientprotocol/client/ClientOperationsFactory;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun logout (Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun logout$default (Lcom/agentclientprotocol/client/Client;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun newSession (Lcom/agentclientprotocol/common/SessionCreationParameters;Lcom/agentclientprotocol/client/ClientOperationsFactory;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun resumeSession-wPMwmcM (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lcom/agentclientprotocol/client/ClientOperationsFactory;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/Agent.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/Agent.kt index dcc2f8a..bce1682 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/Agent.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/Agent.kt @@ -136,6 +136,11 @@ public class Agent( return@setRequestHandler agentSupport.authenticate(params.methodId, params._meta) } + @OptIn(UnstableApi::class) + protocol.setRequestHandler(AcpMethod.AgentMethods.Logout) { params: LogoutRequest -> + return@setRequestHandler agentSupport.logout(params._meta) + } + protocol.setPaginatedRequestHandler( AcpMethod.AgentMethods.SessionList, // TODO: move to some global agent/client settings diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/AgentSupport.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/AgentSupport.kt index 31c9db3..358d85e 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/AgentSupport.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/AgentSupport.kt @@ -5,6 +5,7 @@ import com.agentclientprotocol.client.ClientInfo import com.agentclientprotocol.common.SessionCreationParameters import com.agentclientprotocol.model.AuthMethodId import com.agentclientprotocol.model.AuthenticateResponse +import com.agentclientprotocol.model.LogoutResponse import com.agentclientprotocol.model.SessionId import com.agentclientprotocol.model.SessionInfo import kotlinx.serialization.json.JsonElement @@ -29,6 +30,24 @@ public interface AgentSupport { */ public suspend fun authenticate(methodId: AuthMethodId, _meta: JsonElement?): AuthenticateResponse = AuthenticateResponse() + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Logs out of the current authenticated state. + * + * After a successful logout, all new sessions will require authentication. + * There is no guarantee about the behavior of already running sessions. + * + * @param _meta optional metadata + * @return a [LogoutResponse] indicating the logout result + */ + @UnstableApi + public suspend fun logout(_meta: JsonElement?): LogoutResponse { + throw NotImplementedError("logout is not implemented. The capability is declared in AgentCapabilities.auth.logout") + } + /** * **UNSTABLE** * diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt index b56f6c9..6d55b24 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt @@ -229,6 +229,21 @@ public class Client( return AcpMethod.AgentMethods.Authenticate(protocol, AuthenticateRequest(methodId, _meta)) } + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Logs out of the current authenticated state. + * + * After a successful logout, all new sessions will require authentication. + * There is no guarantee about the behavior of already running sessions. + */ + @UnstableApi + public suspend fun logout(_meta: JsonElement? = null): LogoutResponse { + return AcpMethod.AgentMethods.Logout(protocol, LogoutRequest(_meta)) + } + /** * Creates a new session with specified [sessionParameters]. * diff --git a/build.gradle.kts b/build.gradle.kts index c983fd9..8e0ed32 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { private val buildNumber: String? = System.getenv("GITHUB_RUN_NUMBER") private val isReleasePublication = System.getenv("RELEASE_PUBLICATION")?.toBoolean() ?: false -private val baseVersion = "0.16.6" +private val baseVersion = "0.17.0" allprojects { group = "com.agentclientprotocol"