From b0ac9461d7b4bc02e3560f863fd461bd3c16b79a Mon Sep 17 00:00:00 2001 From: "Anna.Zhdan" Date: Thu, 19 Mar 2026 11:01:26 +0100 Subject: [PATCH] Elicitation support --- .../com/agentclientprotocol/FeaturesTest.kt | 117 +- acp-model/api/acp-model.api | 996 +++++++++++++++++- .../agentclientprotocol/model/Capabilities.kt | 4 +- .../agentclientprotocol/model/Elicitation.kt | 601 +++++++++++ .../com/agentclientprotocol/model/Methods.kt | 8 +- .../com/agentclientprotocol/model/Types.kt | 16 +- .../com/agentclientprotocol/rpc/JsonRpc.kt | 8 +- .../model/ElicitationSerializationTest.kt | 226 ++++ acp/api/acp.api | 10 + .../agent/RemoteClientSessionOperations.kt | 46 +- .../com/agentclientprotocol/client/Client.kt | 64 +- .../common/ClientSessionOperations.kt | 42 + 12 files changed, 2080 insertions(+), 58 deletions(-) create mode 100644 acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Elicitation.kt create mode 100644 acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/ElicitationSerializationTest.kt diff --git a/acp-ktor-test/src/commonTest/kotlin/com/agentclientprotocol/FeaturesTest.kt b/acp-ktor-test/src/commonTest/kotlin/com/agentclientprotocol/FeaturesTest.kt index d80f757..cc8263e 100644 --- a/acp-ktor-test/src/commonTest/kotlin/com/agentclientprotocol/FeaturesTest.kt +++ b/acp-ktor-test/src/commonTest/kotlin/com/agentclientprotocol/FeaturesTest.kt @@ -5,15 +5,18 @@ import com.agentclientprotocol.agent.AgentInfo import com.agentclientprotocol.agent.AgentSession import com.agentclientprotocol.agent.AgentSupport import com.agentclientprotocol.agent.client +import com.agentclientprotocol.annotations.UnstableApi import com.agentclientprotocol.client.* import com.agentclientprotocol.common.* import com.agentclientprotocol.framework.ProtocolDriver import com.agentclientprotocol.model.* +import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.withTimeout import kotlinx.serialization.json.JsonElement import kotlin.test.* @@ -190,6 +193,118 @@ abstract class FeaturesTest(protocolDriver: ProtocolDriver) : ProtocolDriver by assertEquals(modes[1].id, session.currentMode.value, "Current mode should be changed") } + @OptIn(UnstableApi::class) + @Test + fun `request form elicitation from agent`() = testWithProtocols { clientProtocol, agentProtocol -> + val client = Client(protocol = clientProtocol) + + val agentSupport = TestAgentSupport { + object : TestAgentSession() { + override suspend fun prompt(content: List, _meta: JsonElement?): Flow = flow { + val response = currentCoroutineContext().client.requestElicitation( + mode = ElicitationMode.Form( + ElicitationSchema( + properties = mapOf("name" to ElicitationPropertySchema.StringValue()), + required = listOf("name") + ) + ), + message = "Please enter your name" + ) + + val name = ((response.action as? ElicitationAction.Accept) + ?.content?.get("name") as? ElicitationContentValue.StringValue)?.value ?: "none" + emit(Event.SessionUpdateEvent(agentTextChunk("Name: $name"))) + } + } + } + Agent(agentProtocol, agentSupport) + + client.initialize( + ClientInfo( + capabilities = ClientCapabilities( + elicitation = ElicitationCapabilities(form = ElicitationFormCapabilities()) + ) + ) + ) + val session = client.newSession(SessionCreationParameters("/test/path", emptyList())) { _, _ -> + object : TestClientSessionOperations() { + override suspend fun requestElicitation( + mode: ElicitationMode, + message: String, + _meta: JsonElement? + ): ElicitationResponse { + assertTrue(mode is ElicitationMode.Form) + assertEquals("Please enter your name", message) + return ElicitationResponse( + ElicitationAction.Accept( + content = mapOf("name" to ElicitationContentValue.StringValue("Alice")) + ) + ) + } + } + } + + val result = session.promptToList("Test") + assertContentEquals(listOf("Name: Alice", "END_TURN"), result) + } + + @OptIn(UnstableApi::class) + @Test + fun `url elicitation completion notification is routed to client session`() = testWithProtocols { clientProtocol, agentProtocol -> + val client = Client(protocol = clientProtocol) + val completionDeferred = CompletableDeferred() + + val agentSupport = TestAgentSupport { + object : TestAgentSession() { + override suspend fun prompt(content: List, _meta: JsonElement?): Flow = flow { + val response = currentCoroutineContext().client.requestElicitation( + mode = ElicitationMode.Url( + elicitationId = ElicitationId("elic_1"), + url = "https://example.com/auth" + ), + message = "Authenticate" + ) + + if (response.action is ElicitationAction.Accept) { + currentCoroutineContext().client.notifyElicitationComplete(ElicitationId("elic_1")) + } + emit(Event.SessionUpdateEvent(agentTextChunk("Prompt done"))) + } + } + } + Agent(agentProtocol, agentSupport) + + client.initialize( + ClientInfo( + capabilities = ClientCapabilities( + elicitation = ElicitationCapabilities(url = ElicitationUrlCapabilities()) + ) + ) + ) + val session = client.newSession(SessionCreationParameters("/test/path", emptyList())) { _, _ -> + object : TestClientSessionOperations() { + override suspend fun requestElicitation( + mode: ElicitationMode, + message: String, + _meta: JsonElement? + ): ElicitationResponse { + assertTrue(mode is ElicitationMode.Url) + assertEquals("Authenticate", message) + return ElicitationResponse(ElicitationAction.Accept()) + } + + override suspend fun notifyElicitationComplete(elicitationId: ElicitationId, _meta: JsonElement?) { + completionDeferred.complete(elicitationId) + } + } + } + + val result = session.promptToList("Test") + assertContentEquals(listOf("Prompt done", "END_TURN"), result) + val completedId = withTimeout(1000) { completionDeferred.await() } + assertEquals(ElicitationId("elic_1"), completedId) + } + // @Test @@ -220,4 +335,4 @@ abstract class FeaturesTest(protocolDriver: ProtocolDriver) : ProtocolDriver by // val fileResponse = fileSystemOperations.readTextFile("/test/file/path") // assertEquals("test content", fileResponse) // } -} \ No newline at end of file +} diff --git a/acp-model/api/acp-model.api b/acp-model/api/acp-model.api index a0b39af..e79dfda 100644 --- a/acp-model/api/acp-model.api +++ b/acp-model/api/acp-model.api @@ -103,6 +103,14 @@ public final class com/agentclientprotocol/model/AcpMethod$ClientMethods$FsWrite public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$ClientMethods$FsWriteTextFile; } +public final class com/agentclientprotocol/model/AcpMethod$ClientMethods$SessionElicitation : com/agentclientprotocol/model/AcpMethod$AcpSessionRequestResponseMethod { + public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$ClientMethods$SessionElicitation; +} + +public final class com/agentclientprotocol/model/AcpMethod$ClientMethods$SessionElicitationComplete : com/agentclientprotocol/model/AcpMethod$AcpNotificationMethod { + public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$ClientMethods$SessionElicitationComplete; +} + public final class com/agentclientprotocol/model/AcpMethod$ClientMethods$SessionRequestPermission : com/agentclientprotocol/model/AcpMethod$AcpSessionRequestResponseMethod { public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$ClientMethods$SessionRequestPermission; } @@ -599,6 +607,39 @@ public final class com/agentclientprotocol/model/AvailableCommandInput$Unstructu public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/BooleanPropertySchema { + public static final field Companion Lcom/agentclientprotocol/model/BooleanPropertySchema$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/Boolean; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)Lcom/agentclientprotocol/model/BooleanPropertySchema; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/BooleanPropertySchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/agentclientprotocol/model/BooleanPropertySchema; + public fun equals (Ljava/lang/Object;)Z + public final fun getDefault ()Ljava/lang/Boolean; + public final fun getDescription ()Ljava/lang/String; + public final fun getTitle ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/BooleanPropertySchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/BooleanPropertySchema$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/BooleanPropertySchema; + 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/BooleanPropertySchema;)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/BooleanPropertySchema$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/CancelNotification : com/agentclientprotocol/model/AcpNotification, com/agentclientprotocol/model/AcpWithSessionId { public static final field Companion Lcom/agentclientprotocol/model/CancelNotification$Companion; public synthetic fun (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -656,16 +697,18 @@ public final class com/agentclientprotocol/model/CancelRequestNotification$Compa public final class com/agentclientprotocol/model/ClientCapabilities : com/agentclientprotocol/model/AcpCapabilities, com/agentclientprotocol/model/AcpWithMeta { public static final field Companion Lcom/agentclientprotocol/model/ClientCapabilities$Companion; public fun ()V - public fun (Lcom/agentclientprotocol/model/FileSystemCapability;ZLcom/agentclientprotocol/model/AuthCapabilities;Lkotlinx/serialization/json/JsonElement;)V - public synthetic fun (Lcom/agentclientprotocol/model/FileSystemCapability;ZLcom/agentclientprotocol/model/AuthCapabilities;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lcom/agentclientprotocol/model/FileSystemCapability;ZLcom/agentclientprotocol/model/AuthCapabilities;Lcom/agentclientprotocol/model/ElicitationCapabilities;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lcom/agentclientprotocol/model/FileSystemCapability;ZLcom/agentclientprotocol/model/AuthCapabilities;Lcom/agentclientprotocol/model/ElicitationCapabilities;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lcom/agentclientprotocol/model/FileSystemCapability; public final fun component2 ()Z public final fun component3 ()Lcom/agentclientprotocol/model/AuthCapabilities; - public final fun component4 ()Lkotlinx/serialization/json/JsonElement; - public final fun copy (Lcom/agentclientprotocol/model/FileSystemCapability;ZLcom/agentclientprotocol/model/AuthCapabilities;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ClientCapabilities; - public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ClientCapabilities;Lcom/agentclientprotocol/model/FileSystemCapability;ZLcom/agentclientprotocol/model/AuthCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ClientCapabilities; + public final fun component4 ()Lcom/agentclientprotocol/model/ElicitationCapabilities; + public final fun component5 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lcom/agentclientprotocol/model/FileSystemCapability;ZLcom/agentclientprotocol/model/AuthCapabilities;Lcom/agentclientprotocol/model/ElicitationCapabilities;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ClientCapabilities; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ClientCapabilities;Lcom/agentclientprotocol/model/FileSystemCapability;ZLcom/agentclientprotocol/model/AuthCapabilities;Lcom/agentclientprotocol/model/ElicitationCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ClientCapabilities; public fun equals (Ljava/lang/Object;)Z public final fun getAuth ()Lcom/agentclientprotocol/model/AuthCapabilities; + public final fun getElicitation ()Lcom/agentclientprotocol/model/ElicitationCapabilities; public final fun getFs ()Lcom/agentclientprotocol/model/FileSystemCapability; public final fun getTerminal ()Z public fun get_meta ()Lkotlinx/serialization/json/JsonElement; @@ -885,95 +928,621 @@ public final class com/agentclientprotocol/model/Cost : com/agentclientprotocol/ public final fun copy (DLjava/lang/String;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/Cost; public static synthetic fun copy$default (Lcom/agentclientprotocol/model/Cost;DLjava/lang/String;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/Cost; public fun equals (Ljava/lang/Object;)Z - public final fun getAmount ()D - public final fun getCurrency ()Ljava/lang/String; + public final fun getAmount ()D + public final fun getCurrency ()Ljava/lang/String; + 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/Cost$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/Cost$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/Cost; + 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/Cost;)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/Cost$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/CreateTerminalRequest : com/agentclientprotocol/model/AcpRequest, com/agentclientprotocol/model/AcpWithSessionId { + public static final field Companion Lcom/agentclientprotocol/model/CreateTerminalRequest$Companion; + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lkotlin/ULong;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lkotlin/ULong;Lkotlinx/serialization/json/JsonElement;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1-7EW-EgU ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/util/List; + public final fun component4 ()Ljava/lang/String; + public final fun component5 ()Ljava/util/List; + public final fun component6-6VbMDqA ()Lkotlin/ULong; + public final fun component7 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy-nUnGsBg (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lkotlin/ULong;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/CreateTerminalRequest; + public static synthetic fun copy-nUnGsBg$default (Lcom/agentclientprotocol/model/CreateTerminalRequest;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lkotlin/ULong;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/CreateTerminalRequest; + public fun equals (Ljava/lang/Object;)Z + public final fun getArgs ()Ljava/util/List; + public final fun getCommand ()Ljava/lang/String; + public final fun getCwd ()Ljava/lang/String; + public final fun getEnv ()Ljava/util/List; + public final fun getOutputByteLimit-6VbMDqA ()Lkotlin/ULong; + public fun getSessionId-7EW-EgU ()Ljava/lang/String; + 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/CreateTerminalRequest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/CreateTerminalRequest$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/CreateTerminalRequest; + 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/CreateTerminalRequest;)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/CreateTerminalRequest$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/CreateTerminalResponse : com/agentclientprotocol/model/AcpResponse { + public static final field Companion Lcom/agentclientprotocol/model/CreateTerminalResponse$Companion; + public fun (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/CreateTerminalResponse; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/CreateTerminalResponse;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/CreateTerminalResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getTerminalId ()Ljava/lang/String; + 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/CreateTerminalResponse$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/CreateTerminalResponse$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/CreateTerminalResponse; + 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/CreateTerminalResponse;)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/CreateTerminalResponse$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public abstract class com/agentclientprotocol/model/ElicitationAction { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationAction$Companion; + public synthetic fun (ILkotlinx/serialization/internal/SerializationConstructorMarker;)V + public static final synthetic fun write$Self (Lcom/agentclientprotocol/model/ElicitationAction;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class com/agentclientprotocol/model/ElicitationAction$Accept : com/agentclientprotocol/model/ElicitationAction { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationAction$Accept$Companion; + public fun ()V + public fun (Ljava/util/Map;)V + public synthetic fun (Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/Map; + public final fun copy (Ljava/util/Map;)Lcom/agentclientprotocol/model/ElicitationAction$Accept; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationAction$Accept;Ljava/util/Map;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationAction$Accept; + public fun equals (Ljava/lang/Object;)Z + public final fun getContent ()Ljava/util/Map; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/ElicitationAction$Accept$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationAction$Accept$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ElicitationAction$Accept; + 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/ElicitationAction$Accept;)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/ElicitationAction$Accept$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationAction$Cancel : com/agentclientprotocol/model/ElicitationAction { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationAction$Cancel; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationAction$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationAction$Decline : com/agentclientprotocol/model/ElicitationAction { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationAction$Decline; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationCapabilities : com/agentclientprotocol/model/AcpWithMeta { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationCapabilities$Companion; + public fun ()V + public fun (Lcom/agentclientprotocol/model/ElicitationFormCapabilities;Lcom/agentclientprotocol/model/ElicitationUrlCapabilities;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lcom/agentclientprotocol/model/ElicitationFormCapabilities;Lcom/agentclientprotocol/model/ElicitationUrlCapabilities;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/ElicitationFormCapabilities; + public final fun component2 ()Lcom/agentclientprotocol/model/ElicitationUrlCapabilities; + public final fun component3 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lcom/agentclientprotocol/model/ElicitationFormCapabilities;Lcom/agentclientprotocol/model/ElicitationUrlCapabilities;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ElicitationCapabilities; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationCapabilities;Lcom/agentclientprotocol/model/ElicitationFormCapabilities;Lcom/agentclientprotocol/model/ElicitationUrlCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationCapabilities; + public fun equals (Ljava/lang/Object;)Z + public final fun getForm ()Lcom/agentclientprotocol/model/ElicitationFormCapabilities; + public final fun getUrl ()Lcom/agentclientprotocol/model/ElicitationUrlCapabilities; + 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/ElicitationCapabilities$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationCapabilities$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ElicitationCapabilities; + 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/ElicitationCapabilities;)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/ElicitationCapabilities$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationCompleteNotification : com/agentclientprotocol/model/AcpNotification { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationCompleteNotification$Companion; + public synthetic fun (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1-WWIfWFI ()Ljava/lang/String; + public final fun component2 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy-hBnOb4M (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ElicitationCompleteNotification; + public static synthetic fun copy-hBnOb4M$default (Lcom/agentclientprotocol/model/ElicitationCompleteNotification;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationCompleteNotification; + public fun equals (Ljava/lang/Object;)Z + public final fun getElicitationId-WWIfWFI ()Ljava/lang/String; + 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/ElicitationCompleteNotification$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationCompleteNotification$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ElicitationCompleteNotification; + 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/ElicitationCompleteNotification;)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/ElicitationCompleteNotification$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public abstract class com/agentclientprotocol/model/ElicitationContentValue { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationContentValue$Companion; +} + +public final class com/agentclientprotocol/model/ElicitationContentValue$BooleanValue : com/agentclientprotocol/model/ElicitationContentValue { + public fun (Z)V + public final fun component1 ()Z + public final fun copy (Z)Lcom/agentclientprotocol/model/ElicitationContentValue$BooleanValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationContentValue$BooleanValue;ZILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationContentValue$BooleanValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getValue ()Z + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationContentValue$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationContentValue$IntegerValue : com/agentclientprotocol/model/ElicitationContentValue { + public fun (J)V + public final fun component1 ()J + public final fun copy (J)Lcom/agentclientprotocol/model/ElicitationContentValue$IntegerValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationContentValue$IntegerValue;JILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationContentValue$IntegerValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getValue ()J + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationContentValue$NumberValue : com/agentclientprotocol/model/ElicitationContentValue { + public fun (D)V + public final fun component1 ()D + public final fun copy (D)Lcom/agentclientprotocol/model/ElicitationContentValue$NumberValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationContentValue$NumberValue;DILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationContentValue$NumberValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getValue ()D + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationContentValue$StringArrayValue : com/agentclientprotocol/model/ElicitationContentValue { + public fun (Ljava/util/List;)V + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Lcom/agentclientprotocol/model/ElicitationContentValue$StringArrayValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationContentValue$StringArrayValue;Ljava/util/List;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationContentValue$StringArrayValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getValue ()Ljava/util/List; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationContentValue$StringValue : com/agentclientprotocol/model/ElicitationContentValue { + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lcom/agentclientprotocol/model/ElicitationContentValue$StringValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationContentValue$StringValue;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationContentValue$StringValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getValue ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationFormCapabilities : com/agentclientprotocol/model/AcpWithMeta { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationFormCapabilities$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/ElicitationFormCapabilities; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationFormCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationFormCapabilities; + 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/ElicitationFormCapabilities$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationFormCapabilities$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ElicitationFormCapabilities; + 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/ElicitationFormCapabilities;)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/ElicitationFormCapabilities$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationId { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationId$Companion; + public static final synthetic fun box-impl (Ljava/lang/String;)Lcom/agentclientprotocol/model/ElicitationId; + public static fun constructor-impl (Ljava/lang/String;)Ljava/lang/String; + public fun equals (Ljava/lang/Object;)Z + public static fun equals-impl (Ljava/lang/String;Ljava/lang/Object;)Z + public static final fun equals-impl0 (Ljava/lang/String;Ljava/lang/String;)Z + public final fun getValue ()Ljava/lang/String; + public fun hashCode ()I + public static fun hashCode-impl (Ljava/lang/String;)I + public fun toString ()Ljava/lang/String; + public static fun toString-impl (Ljava/lang/String;)Ljava/lang/String; + public final synthetic fun unbox-impl ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/ElicitationId$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationId$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun deserialize-lvk1YYk (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/String; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public final fun serialize-gzpmA1Y (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/String;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationId$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public abstract class com/agentclientprotocol/model/ElicitationMode { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationMode$Companion; + public synthetic fun (ILkotlinx/serialization/internal/SerializationConstructorMarker;)V + public static final synthetic fun write$Self (Lcom/agentclientprotocol/model/ElicitationMode;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class com/agentclientprotocol/model/ElicitationMode$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationMode$Form : com/agentclientprotocol/model/ElicitationMode { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationMode$Form$Companion; + public fun (Lcom/agentclientprotocol/model/ElicitationSchema;)V + public final fun component1 ()Lcom/agentclientprotocol/model/ElicitationSchema; + public final fun copy (Lcom/agentclientprotocol/model/ElicitationSchema;)Lcom/agentclientprotocol/model/ElicitationMode$Form; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationMode$Form;Lcom/agentclientprotocol/model/ElicitationSchema;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationMode$Form; + public fun equals (Ljava/lang/Object;)Z + public final fun getRequestedSchema ()Lcom/agentclientprotocol/model/ElicitationSchema; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/ElicitationMode$Form$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationMode$Form$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ElicitationMode$Form; + 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/ElicitationMode$Form;)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/ElicitationMode$Form$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationMode$Url : com/agentclientprotocol/model/ElicitationMode { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationMode$Url$Companion; + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1-WWIfWFI ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy-hBnOb4M (Ljava/lang/String;Ljava/lang/String;)Lcom/agentclientprotocol/model/ElicitationMode$Url; + public static synthetic fun copy-hBnOb4M$default (Lcom/agentclientprotocol/model/ElicitationMode$Url;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationMode$Url; + public fun equals (Ljava/lang/Object;)Z + public final fun getElicitationId-WWIfWFI ()Ljava/lang/String; + public final fun getUrl ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/ElicitationMode$Url$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationMode$Url$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ElicitationMode$Url; + 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/ElicitationMode$Url;)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/ElicitationMode$Url$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public abstract class com/agentclientprotocol/model/ElicitationPropertySchema { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationPropertySchema$Companion; +} + +public final class com/agentclientprotocol/model/ElicitationPropertySchema$ArrayValue : com/agentclientprotocol/model/ElicitationPropertySchema { + public fun (Lcom/agentclientprotocol/model/MultiSelectPropertySchema;)V + public final fun component1 ()Lcom/agentclientprotocol/model/MultiSelectPropertySchema; + public final fun copy (Lcom/agentclientprotocol/model/MultiSelectPropertySchema;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$ArrayValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationPropertySchema$ArrayValue;Lcom/agentclientprotocol/model/MultiSelectPropertySchema;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$ArrayValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getSchema ()Lcom/agentclientprotocol/model/MultiSelectPropertySchema; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationPropertySchema$BooleanValue : com/agentclientprotocol/model/ElicitationPropertySchema { + public fun ()V + public fun (Lcom/agentclientprotocol/model/BooleanPropertySchema;)V + public synthetic fun (Lcom/agentclientprotocol/model/BooleanPropertySchema;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/BooleanPropertySchema; + public final fun copy (Lcom/agentclientprotocol/model/BooleanPropertySchema;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$BooleanValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationPropertySchema$BooleanValue;Lcom/agentclientprotocol/model/BooleanPropertySchema;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$BooleanValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getSchema ()Lcom/agentclientprotocol/model/BooleanPropertySchema; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationPropertySchema$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationPropertySchema$IntegerValue : com/agentclientprotocol/model/ElicitationPropertySchema { + public fun ()V + public fun (Lcom/agentclientprotocol/model/IntegerPropertySchema;)V + public synthetic fun (Lcom/agentclientprotocol/model/IntegerPropertySchema;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/IntegerPropertySchema; + public final fun copy (Lcom/agentclientprotocol/model/IntegerPropertySchema;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$IntegerValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationPropertySchema$IntegerValue;Lcom/agentclientprotocol/model/IntegerPropertySchema;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$IntegerValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getSchema ()Lcom/agentclientprotocol/model/IntegerPropertySchema; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationPropertySchema$NumberValue : com/agentclientprotocol/model/ElicitationPropertySchema { + public fun ()V + public fun (Lcom/agentclientprotocol/model/NumberPropertySchema;)V + public synthetic fun (Lcom/agentclientprotocol/model/NumberPropertySchema;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/NumberPropertySchema; + public final fun copy (Lcom/agentclientprotocol/model/NumberPropertySchema;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$NumberValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationPropertySchema$NumberValue;Lcom/agentclientprotocol/model/NumberPropertySchema;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$NumberValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getSchema ()Lcom/agentclientprotocol/model/NumberPropertySchema; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationPropertySchema$StringValue : com/agentclientprotocol/model/ElicitationPropertySchema { + public fun ()V + public fun (Lcom/agentclientprotocol/model/StringPropertySchema;)V + public synthetic fun (Lcom/agentclientprotocol/model/StringPropertySchema;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/StringPropertySchema; + public final fun copy (Lcom/agentclientprotocol/model/StringPropertySchema;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$StringValue; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationPropertySchema$StringValue;Lcom/agentclientprotocol/model/StringPropertySchema;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationPropertySchema$StringValue; + public fun equals (Ljava/lang/Object;)Z + public final fun getSchema ()Lcom/agentclientprotocol/model/StringPropertySchema; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationRequest : com/agentclientprotocol/model/AcpRequest, com/agentclientprotocol/model/AcpWithSessionId { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationRequest$Companion; + public synthetic fun (Ljava/lang/String;Lcom/agentclientprotocol/model/ElicitationMode;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Lcom/agentclientprotocol/model/ElicitationMode;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1-7EW-EgU ()Ljava/lang/String; + public final fun component2 ()Lcom/agentclientprotocol/model/ElicitationMode; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy-wPMwmcM (Ljava/lang/String;Lcom/agentclientprotocol/model/ElicitationMode;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ElicitationRequest; + public static synthetic fun copy-wPMwmcM$default (Lcom/agentclientprotocol/model/ElicitationRequest;Ljava/lang/String;Lcom/agentclientprotocol/model/ElicitationMode;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationRequest; + public fun equals (Ljava/lang/Object;)Z + public final fun getMessage ()Ljava/lang/String; + public final fun getMode ()Lcom/agentclientprotocol/model/ElicitationMode; + public fun getSessionId-7EW-EgU ()Ljava/lang/String; + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/agentclientprotocol/model/ElicitationRequest$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationResponse : com/agentclientprotocol/model/AcpResponse { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationResponse$Companion; + public fun (Lcom/agentclientprotocol/model/ElicitationAction;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lcom/agentclientprotocol/model/ElicitationAction;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/ElicitationAction; + public final fun component2 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lcom/agentclientprotocol/model/ElicitationAction;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ElicitationResponse; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationResponse;Lcom/agentclientprotocol/model/ElicitationAction;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getAction ()Lcom/agentclientprotocol/model/ElicitationAction; 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/Cost$$serializer : kotlinx/serialization/internal/GeneratedSerializer { - public static final field INSTANCE Lcom/agentclientprotocol/model/Cost$$serializer; +public final synthetic class com/agentclientprotocol/model/ElicitationResponse$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationResponse$$serializer; public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/Cost; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ElicitationResponse; 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/Cost;)V + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/ElicitationResponse;)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/Cost$Companion { +public final class com/agentclientprotocol/model/ElicitationResponse$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } -public final class com/agentclientprotocol/model/CreateTerminalRequest : com/agentclientprotocol/model/AcpRequest, com/agentclientprotocol/model/AcpWithSessionId { - public static final field Companion Lcom/agentclientprotocol/model/CreateTerminalRequest$Companion; - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lkotlin/ULong;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lkotlin/ULong;Lkotlinx/serialization/json/JsonElement;Lkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1-7EW-EgU ()Ljava/lang/String; +public final class com/agentclientprotocol/model/ElicitationSchema { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationSchema$Companion; + public fun ()V + public fun (Lcom/agentclientprotocol/model/ElicitationSchemaType;Ljava/lang/String;Ljava/util/Map;Ljava/util/List;Ljava/lang/String;)V + public synthetic fun (Lcom/agentclientprotocol/model/ElicitationSchemaType;Ljava/lang/String;Ljava/util/Map;Ljava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/ElicitationSchemaType; public final fun component2 ()Ljava/lang/String; - public final fun component3 ()Ljava/util/List; - public final fun component4 ()Ljava/lang/String; - public final fun component5 ()Ljava/util/List; - public final fun component6-6VbMDqA ()Lkotlin/ULong; - public final fun component7 ()Lkotlinx/serialization/json/JsonElement; - public final fun copy-nUnGsBg (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lkotlin/ULong;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/CreateTerminalRequest; - public static synthetic fun copy-nUnGsBg$default (Lcom/agentclientprotocol/model/CreateTerminalRequest;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lkotlin/ULong;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/CreateTerminalRequest; + public final fun component3 ()Ljava/util/Map; + public final fun component4 ()Ljava/util/List; + public final fun component5 ()Ljava/lang/String; + public final fun copy (Lcom/agentclientprotocol/model/ElicitationSchemaType;Ljava/lang/String;Ljava/util/Map;Ljava/util/List;Ljava/lang/String;)Lcom/agentclientprotocol/model/ElicitationSchema; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationSchema;Lcom/agentclientprotocol/model/ElicitationSchemaType;Ljava/lang/String;Ljava/util/Map;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationSchema; public fun equals (Ljava/lang/Object;)Z - public final fun getArgs ()Ljava/util/List; - public final fun getCommand ()Ljava/lang/String; - public final fun getCwd ()Ljava/lang/String; - public final fun getEnv ()Ljava/util/List; - public final fun getOutputByteLimit-6VbMDqA ()Lkotlin/ULong; - public fun getSessionId-7EW-EgU ()Ljava/lang/String; - public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public final fun getDescription ()Ljava/lang/String; + public final fun getProperties ()Ljava/util/Map; + public final fun getRequired ()Ljava/util/List; + public final fun getTitle ()Ljava/lang/String; + public final fun getType ()Lcom/agentclientprotocol/model/ElicitationSchemaType; public fun hashCode ()I public fun toString ()Ljava/lang/String; } -public final synthetic class com/agentclientprotocol/model/CreateTerminalRequest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { - public static final field INSTANCE Lcom/agentclientprotocol/model/CreateTerminalRequest$$serializer; +public final synthetic class com/agentclientprotocol/model/ElicitationSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationSchema$$serializer; public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/CreateTerminalRequest; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ElicitationSchema; 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/CreateTerminalRequest;)V + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/ElicitationSchema;)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/CreateTerminalRequest$Companion { +public final class com/agentclientprotocol/model/ElicitationSchema$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } -public final class com/agentclientprotocol/model/CreateTerminalResponse : com/agentclientprotocol/model/AcpResponse { - public static final field Companion Lcom/agentclientprotocol/model/CreateTerminalResponse$Companion; - public fun (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)V - public synthetic fun (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Lkotlinx/serialization/json/JsonElement; - public final fun copy (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/CreateTerminalResponse; - public static synthetic fun copy$default (Lcom/agentclientprotocol/model/CreateTerminalResponse;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/CreateTerminalResponse; +public final class com/agentclientprotocol/model/ElicitationSchemaType : java/lang/Enum { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationSchemaType$Companion; + public static final field OBJECT Lcom/agentclientprotocol/model/ElicitationSchemaType; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/agentclientprotocol/model/ElicitationSchemaType; + public static fun values ()[Lcom/agentclientprotocol/model/ElicitationSchemaType; +} + +public final class com/agentclientprotocol/model/ElicitationSchemaType$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationStringType : java/lang/Enum { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationStringType$Companion; + public static final field STRING Lcom/agentclientprotocol/model/ElicitationStringType; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/agentclientprotocol/model/ElicitationStringType; + public static fun values ()[Lcom/agentclientprotocol/model/ElicitationStringType; +} + +public final class com/agentclientprotocol/model/ElicitationStringType$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationUrlCapabilities : com/agentclientprotocol/model/AcpWithMeta { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationUrlCapabilities$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/ElicitationUrlCapabilities; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ElicitationUrlCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ElicitationUrlCapabilities; public fun equals (Ljava/lang/Object;)Z - public final fun getTerminalId ()Ljava/lang/String; 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/CreateTerminalResponse$$serializer : kotlinx/serialization/internal/GeneratedSerializer { - public static final field INSTANCE Lcom/agentclientprotocol/model/CreateTerminalResponse$$serializer; +public final synthetic class com/agentclientprotocol/model/ElicitationUrlCapabilities$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ElicitationUrlCapabilities$$serializer; public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/CreateTerminalResponse; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ElicitationUrlCapabilities; 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/CreateTerminalResponse;)V + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/ElicitationUrlCapabilities;)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/CreateTerminalResponse$Companion { +public final class com/agentclientprotocol/model/ElicitationUrlCapabilities$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ElicitationUrlOnlyMode : java/lang/Enum { + public static final field Companion Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode$Companion; + public static final field URL Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode; + public static fun values ()[Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode; +} + +public final class com/agentclientprotocol/model/ElicitationUrlOnlyMode$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -1085,6 +1654,35 @@ public final class com/agentclientprotocol/model/EmbeddedResourceResource$TextRe public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/EnumOption { + public static final field Companion Lcom/agentclientprotocol/model/EnumOption$Companion; + public fun (Ljava/lang/String;Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lcom/agentclientprotocol/model/EnumOption; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/EnumOption;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/model/EnumOption; + public fun equals (Ljava/lang/Object;)Z + public final fun getTitle ()Ljava/lang/String; + public final fun getValue ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/EnumOption$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/EnumOption$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/EnumOption; + 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/EnumOption;)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/EnumOption$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/EnvVariable : com/agentclientprotocol/model/AcpWithMeta { public static final field Companion Lcom/agentclientprotocol/model/EnvVariable$Companion; public fun (Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)V @@ -1356,6 +1954,43 @@ public final class com/agentclientprotocol/model/InitializeResponse$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/IntegerPropertySchema { + public static final field Companion Lcom/agentclientprotocol/model/IntegerPropertySchema$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/Long; + public final fun component4 ()Ljava/lang/Long; + public final fun component5 ()Ljava/lang/Long; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)Lcom/agentclientprotocol/model/IntegerPropertySchema; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/IntegerPropertySchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;ILjava/lang/Object;)Lcom/agentclientprotocol/model/IntegerPropertySchema; + public fun equals (Ljava/lang/Object;)Z + public final fun getDefault ()Ljava/lang/Long; + public final fun getDescription ()Ljava/lang/String; + public final fun getMaximum ()Ljava/lang/Long; + public final fun getMinimum ()Ljava/lang/Long; + public final fun getTitle ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/IntegerPropertySchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/IntegerPropertySchema$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/IntegerPropertySchema; + 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/IntegerPropertySchema;)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/IntegerPropertySchema$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/KillTerminalCommandRequest : com/agentclientprotocol/model/AcpRequest, com/agentclientprotocol/model/AcpWithSessionId { public static final field Companion Lcom/agentclientprotocol/model/KillTerminalCommandRequest$Companion; public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -1785,6 +2420,109 @@ public final class com/agentclientprotocol/model/ModelInfo$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public abstract class com/agentclientprotocol/model/MultiSelectItems { + public static final field Companion Lcom/agentclientprotocol/model/MultiSelectItems$Companion; +} + +public final class com/agentclientprotocol/model/MultiSelectItems$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/MultiSelectItems$Titled : com/agentclientprotocol/model/MultiSelectItems { + public static final field Companion Lcom/agentclientprotocol/model/MultiSelectItems$Titled$Companion; + public fun (Ljava/util/List;)V + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Lcom/agentclientprotocol/model/MultiSelectItems$Titled; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/MultiSelectItems$Titled;Ljava/util/List;ILjava/lang/Object;)Lcom/agentclientprotocol/model/MultiSelectItems$Titled; + public fun equals (Ljava/lang/Object;)Z + public final fun getOptions ()Ljava/util/List; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/MultiSelectItems$Titled$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/MultiSelectItems$Titled$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/MultiSelectItems$Titled; + 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/MultiSelectItems$Titled;)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/MultiSelectItems$Titled$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/MultiSelectItems$Untitled : com/agentclientprotocol/model/MultiSelectItems { + public static final field Companion Lcom/agentclientprotocol/model/MultiSelectItems$Untitled$Companion; + public fun (Lcom/agentclientprotocol/model/ElicitationStringType;Ljava/util/List;)V + public synthetic fun (Lcom/agentclientprotocol/model/ElicitationStringType;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/ElicitationStringType; + public final fun component2 ()Ljava/util/List; + public final fun copy (Lcom/agentclientprotocol/model/ElicitationStringType;Ljava/util/List;)Lcom/agentclientprotocol/model/MultiSelectItems$Untitled; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/MultiSelectItems$Untitled;Lcom/agentclientprotocol/model/ElicitationStringType;Ljava/util/List;ILjava/lang/Object;)Lcom/agentclientprotocol/model/MultiSelectItems$Untitled; + public fun equals (Ljava/lang/Object;)Z + public final fun getType ()Lcom/agentclientprotocol/model/ElicitationStringType; + public final fun getValues ()Ljava/util/List; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/MultiSelectItems$Untitled$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/MultiSelectItems$Untitled$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/MultiSelectItems$Untitled; + 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/MultiSelectItems$Untitled;)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/MultiSelectItems$Untitled$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/MultiSelectPropertySchema { + public static final field Companion Lcom/agentclientprotocol/model/MultiSelectPropertySchema$Companion; + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lkotlin/ULong;Lkotlin/ULong;Lcom/agentclientprotocol/model/MultiSelectItems;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lkotlin/ULong;Lkotlin/ULong;Lcom/agentclientprotocol/model/MultiSelectItems;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3-6VbMDqA ()Lkotlin/ULong; + public final fun component4-6VbMDqA ()Lkotlin/ULong; + public final fun component5 ()Lcom/agentclientprotocol/model/MultiSelectItems; + public final fun component6 ()Ljava/util/List; + public final fun copy-f1GGc2c (Ljava/lang/String;Ljava/lang/String;Lkotlin/ULong;Lkotlin/ULong;Lcom/agentclientprotocol/model/MultiSelectItems;Ljava/util/List;)Lcom/agentclientprotocol/model/MultiSelectPropertySchema; + public static synthetic fun copy-f1GGc2c$default (Lcom/agentclientprotocol/model/MultiSelectPropertySchema;Ljava/lang/String;Ljava/lang/String;Lkotlin/ULong;Lkotlin/ULong;Lcom/agentclientprotocol/model/MultiSelectItems;Ljava/util/List;ILjava/lang/Object;)Lcom/agentclientprotocol/model/MultiSelectPropertySchema; + public fun equals (Ljava/lang/Object;)Z + public final fun getDefault ()Ljava/util/List; + public final fun getDescription ()Ljava/lang/String; + public final fun getItems ()Lcom/agentclientprotocol/model/MultiSelectItems; + public final fun getMaxItems-6VbMDqA ()Lkotlin/ULong; + public final fun getMinItems-6VbMDqA ()Lkotlin/ULong; + public final fun getTitle ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/MultiSelectPropertySchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/MultiSelectPropertySchema$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/MultiSelectPropertySchema; + 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/MultiSelectPropertySchema;)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/MultiSelectPropertySchema$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/NewSessionRequest : com/agentclientprotocol/model/AcpRequest { public static final field Companion Lcom/agentclientprotocol/model/NewSessionRequest$Companion; public fun (Ljava/lang/String;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;)V @@ -1853,6 +2591,43 @@ public final class com/agentclientprotocol/model/NewSessionResponse$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/NumberPropertySchema { + public static final field Companion Lcom/agentclientprotocol/model/NumberPropertySchema$Companion; + public fun ()V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/Double; + public final fun component4 ()Ljava/lang/Double; + public final fun component5 ()Ljava/lang/Double; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;)Lcom/agentclientprotocol/model/NumberPropertySchema; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/NumberPropertySchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;ILjava/lang/Object;)Lcom/agentclientprotocol/model/NumberPropertySchema; + public fun equals (Ljava/lang/Object;)Z + public final fun getDefault ()Ljava/lang/Double; + public final fun getDescription ()Ljava/lang/String; + public final fun getMaximum ()Ljava/lang/Double; + public final fun getMinimum ()Ljava/lang/Double; + public final fun getTitle ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/NumberPropertySchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/NumberPropertySchema$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/NumberPropertySchema; + 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/NumberPropertySchema;)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/NumberPropertySchema$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/PermissionOption : com/agentclientprotocol/model/AcpWithMeta { public static final field Companion Lcom/agentclientprotocol/model/PermissionOption$Companion; public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lcom/agentclientprotocol/model/PermissionOptionKind;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -3774,6 +4549,65 @@ public final class com/agentclientprotocol/model/StopReason$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/StringFormat : java/lang/Enum { + public static final field Companion Lcom/agentclientprotocol/model/StringFormat$Companion; + public static final field DATE Lcom/agentclientprotocol/model/StringFormat; + public static final field DATE_TIME Lcom/agentclientprotocol/model/StringFormat; + public static final field EMAIL Lcom/agentclientprotocol/model/StringFormat; + public static final field URI Lcom/agentclientprotocol/model/StringFormat; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/agentclientprotocol/model/StringFormat; + public static fun values ()[Lcom/agentclientprotocol/model/StringFormat; +} + +public final class com/agentclientprotocol/model/StringFormat$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/StringPropertySchema { + public static final field Companion Lcom/agentclientprotocol/model/StringPropertySchema$Companion; + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lkotlin/UInt;Lkotlin/UInt;Ljava/lang/String;Lcom/agentclientprotocol/model/StringFormat;Ljava/lang/String;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lkotlin/UInt;Lkotlin/UInt;Ljava/lang/String;Lcom/agentclientprotocol/model/StringFormat;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3-0hXNFcg ()Lkotlin/UInt; + public final fun component4-0hXNFcg ()Lkotlin/UInt; + public final fun component5 ()Ljava/lang/String; + public final fun component6 ()Lcom/agentclientprotocol/model/StringFormat; + public final fun component7 ()Ljava/lang/String; + public final fun component8 ()Ljava/util/List; + public final fun component9 ()Ljava/util/List; + public final fun copy-7A40bqE (Ljava/lang/String;Ljava/lang/String;Lkotlin/UInt;Lkotlin/UInt;Ljava/lang/String;Lcom/agentclientprotocol/model/StringFormat;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Lcom/agentclientprotocol/model/StringPropertySchema; + public static synthetic fun copy-7A40bqE$default (Lcom/agentclientprotocol/model/StringPropertySchema;Ljava/lang/String;Ljava/lang/String;Lkotlin/UInt;Lkotlin/UInt;Ljava/lang/String;Lcom/agentclientprotocol/model/StringFormat;Ljava/lang/String;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Lcom/agentclientprotocol/model/StringPropertySchema; + public fun equals (Ljava/lang/Object;)Z + public final fun getDefault ()Ljava/lang/String; + public final fun getDescription ()Ljava/lang/String; + public final fun getEnumValues ()Ljava/util/List; + public final fun getFormat ()Lcom/agentclientprotocol/model/StringFormat; + public final fun getMaxLength-0hXNFcg ()Lkotlin/UInt; + public final fun getMinLength-0hXNFcg ()Lkotlin/UInt; + public final fun getOneOf ()Ljava/util/List; + public final fun getPattern ()Ljava/lang/String; + public final fun getTitle ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/StringPropertySchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/StringPropertySchema$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/StringPropertySchema; + 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/StringPropertySchema;)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/StringPropertySchema$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/TerminalExitStatus : com/agentclientprotocol/model/AcpWithMeta { public static final field Companion Lcom/agentclientprotocol/model/TerminalExitStatus$Companion; public synthetic fun (Lkotlin/UInt;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -4076,6 +4910,67 @@ public final class com/agentclientprotocol/model/TypesKt { public static final fun getSUPPORTED_PROTOCOL_VERSIONS ()[Ljava/lang/Integer; } +public final class com/agentclientprotocol/model/UrlElicitationRequiredData { + public static final field Companion Lcom/agentclientprotocol/model/UrlElicitationRequiredData$Companion; + public fun (Ljava/util/List;)V + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Lcom/agentclientprotocol/model/UrlElicitationRequiredData; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/UrlElicitationRequiredData;Ljava/util/List;ILjava/lang/Object;)Lcom/agentclientprotocol/model/UrlElicitationRequiredData; + public fun equals (Ljava/lang/Object;)Z + public final fun getElicitations ()Ljava/util/List; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/UrlElicitationRequiredData$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/UrlElicitationRequiredData$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/UrlElicitationRequiredData; + 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/UrlElicitationRequiredData;)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/UrlElicitationRequiredData$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/UrlElicitationRequiredItem { + public static final field Companion Lcom/agentclientprotocol/model/UrlElicitationRequiredItem$Companion; + public synthetic fun (Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode; + public final fun component2-WWIfWFI ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/String; + public final fun copy-6TTUXXo (Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/agentclientprotocol/model/UrlElicitationRequiredItem; + public static synthetic fun copy-6TTUXXo$default (Lcom/agentclientprotocol/model/UrlElicitationRequiredItem;Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/model/UrlElicitationRequiredItem; + public fun equals (Ljava/lang/Object;)Z + public final fun getElicitationId-WWIfWFI ()Ljava/lang/String; + public final fun getMessage ()Ljava/lang/String; + public final fun getMode ()Lcom/agentclientprotocol/model/ElicitationUrlOnlyMode; + public final fun getUrl ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/UrlElicitationRequiredItem$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/UrlElicitationRequiredItem$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/UrlElicitationRequiredItem; + 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/UrlElicitationRequiredItem;)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/UrlElicitationRequiredItem$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/WaitForTerminalExitRequest : com/agentclientprotocol/model/AcpRequest, com/agentclientprotocol/model/AcpWithSessionId { public static final field Companion Lcom/agentclientprotocol/model/WaitForTerminalExitRequest$Companion; public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -4244,6 +5139,7 @@ public final class com/agentclientprotocol/rpc/JsonRpcErrorCode : java/lang/Enum public static final field METHOD_NOT_FOUND Lcom/agentclientprotocol/rpc/JsonRpcErrorCode; public static final field PARSE_ERROR Lcom/agentclientprotocol/rpc/JsonRpcErrorCode; public static final field RESOURCE_NOT_FOUND Lcom/agentclientprotocol/rpc/JsonRpcErrorCode; + public static final field URL_ELICITATION_REQUIRED Lcom/agentclientprotocol/rpc/JsonRpcErrorCode; public final fun getCode ()I public static fun getEntries ()Lkotlin/enums/EnumEntries; public final fun getMessage ()Ljava/lang/String; 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..da09bb7 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt @@ -69,6 +69,8 @@ public data class ClientCapabilities( @EncodeDefault val terminal: Boolean = false, @property:UnstableApi @EncodeDefault val auth: AuthCapabilities? = null, + @property:UnstableApi + @EncodeDefault val elicitation: ElicitationCapabilities? = null, override val _meta: JsonElement? = null ) : AcpCapabilities, AcpWithMeta @@ -149,4 +151,4 @@ public data class AgentCapabilities( @EncodeDefault val mcpCapabilities: McpCapabilities = McpCapabilities(), @EncodeDefault val sessionCapabilities: SessionCapabilities = SessionCapabilities(), override val _meta: JsonElement? = null -) : AcpCapabilities, AcpWithMeta \ No newline at end of file +) : AcpCapabilities, AcpWithMeta diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Elicitation.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Elicitation.kt new file mode 100644 index 0000000..f61e1b7 --- /dev/null +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Elicitation.kt @@ -0,0 +1,601 @@ +@file:Suppress("unused") +@file:OptIn(ExperimentalSerializationApi::class) + +package com.agentclientprotocol.model + +import com.agentclientprotocol.annotations.UnstableApi +import com.agentclientprotocol.rpc.ACPJson +import kotlinx.serialization.EncodeDefault +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationException +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.descriptors.buildClassSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonClassDiscriminator +import kotlinx.serialization.json.JsonContentPolymorphicSerializer +import kotlinx.serialization.json.JsonDecoder +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonEncoder +import kotlinx.serialization.json.JsonPrimitive +import kotlinx.serialization.json.boolean +import kotlinx.serialization.json.booleanOrNull +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.doubleOrNull +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import kotlinx.serialization.json.longOrNull +import kotlinx.serialization.json.put + +private const val ELICITATION_MODE_DISCRIMINATOR = "mode" +private const val ELICITATION_ACTION_DISCRIMINATOR = "action" +private const val ELICITATION_PROPERTY_TYPE_DISCRIMINATOR = "type" +private const val ELICITATION_REQUEST_SESSION_ID_FIELD = "sessionId" +private const val ELICITATION_REQUEST_MESSAGE_FIELD = "message" +private const val ELICITATION_META_FIELD = "_meta" +private const val ELICITATION_ENUM_FIELD = "enum" +private const val ELICITATION_ANY_OF_FIELD = "anyOf" +private const val ELICITATION_MODE_FORM = "form" +private const val ELICITATION_MODE_URL = "url" +private const val ELICITATION_TYPE_STRING = "string" +private const val ELICITATION_TYPE_NUMBER = "number" +private const val ELICITATION_TYPE_INTEGER = "integer" +private const val ELICITATION_TYPE_BOOLEAN = "boolean" +private const val ELICITATION_TYPE_ARRAY = "array" +private const val ELICITATION_ACTION_ACCEPT = "accept" +private const val ELICITATION_ACTION_DECLINE = "decline" +private const val ELICITATION_ACTION_CANCEL = "cancel" + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * String format types for string properties in elicitation schemas. + */ +@UnstableApi +@Serializable +public enum class StringFormat { + @SerialName("email") EMAIL, + @SerialName("uri") URI, + @SerialName("date") DATE, + @SerialName("date-time") DATE_TIME +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Type discriminator for elicitation schemas. + */ +@UnstableApi +@Serializable +public enum class ElicitationSchemaType { + @SerialName("object") OBJECT +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * A titled enum option with a const value and human-readable title. + */ +@UnstableApi +@Serializable +public data class EnumOption( + @SerialName("const") + val value: String, + val title: String +) + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Schema for string properties in an elicitation form. + */ +@UnstableApi +@Serializable +public data class StringPropertySchema( + val title: String? = null, + val description: String? = null, + val minLength: UInt? = null, + val maxLength: UInt? = null, + val pattern: String? = null, + val format: StringFormat? = null, + val default: String? = null, + @SerialName(ELICITATION_ENUM_FIELD) + val enumValues: List? = null, + @SerialName("oneOf") + val oneOf: List? = null +) + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Schema for number (floating-point) properties in an elicitation form. + */ +@UnstableApi +@Serializable +public data class NumberPropertySchema( + val title: String? = null, + val description: String? = null, + val minimum: Double? = null, + val maximum: Double? = null, + val default: Double? = null +) + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Schema for integer properties in an elicitation form. + */ +@UnstableApi +@Serializable +public data class IntegerPropertySchema( + val title: String? = null, + val description: String? = null, + val minimum: Long? = null, + val maximum: Long? = null, + val default: Long? = null +) + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Schema for boolean properties in an elicitation form. + */ +@UnstableApi +@Serializable +public data class BooleanPropertySchema( + val title: String? = null, + val description: String? = null, + val default: Boolean? = null +) + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Type discriminator for untitled string arrays in multi-select schemas. + */ +@UnstableApi +@Serializable +public enum class ElicitationStringType { + @SerialName(ELICITATION_TYPE_STRING) STRING +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Items definition for a multi-select property. + */ +@UnstableApi +@Serializable(with = MultiSelectItemsSerializer::class) +public sealed class MultiSelectItems { + @Serializable + public data class Untitled( + @EncodeDefault + val type: ElicitationStringType = ElicitationStringType.STRING, + @SerialName(ELICITATION_ENUM_FIELD) + val values: List + ) : MultiSelectItems() + + @Serializable + public data class Titled( + @SerialName(ELICITATION_ANY_OF_FIELD) + val options: List + ) : MultiSelectItems() +} + +@OptIn(UnstableApi::class) +internal object MultiSelectItemsSerializer : + JsonContentPolymorphicSerializer(MultiSelectItems::class) { + override fun selectDeserializer(element: JsonElement): DeserializationStrategy { + val obj = element.jsonObject + return when { + ELICITATION_ANY_OF_FIELD in obj -> MultiSelectItems.Titled.serializer() + ELICITATION_ENUM_FIELD in obj -> MultiSelectItems.Untitled.serializer() + else -> throw SerializationException("Cannot determine MultiSelectItems type; expected '$ELICITATION_ANY_OF_FIELD' or '$ELICITATION_ENUM_FIELD'") + } + } +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Schema for multi-select (array) properties in an elicitation form. + */ +@UnstableApi +@Serializable +public data class MultiSelectPropertySchema( + val title: String? = null, + val description: String? = null, + val minItems: ULong? = null, + val maxItems: ULong? = null, + val items: MultiSelectItems, + val default: List? = null +) + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Property schema for elicitation form fields. + */ +@UnstableApi +@Serializable(with = ElicitationPropertySchemaSerializer::class) +public sealed class ElicitationPropertySchema { + public data class StringValue(val schema: StringPropertySchema = StringPropertySchema()) : ElicitationPropertySchema() + public data class NumberValue(val schema: NumberPropertySchema = NumberPropertySchema()) : ElicitationPropertySchema() + public data class IntegerValue(val schema: IntegerPropertySchema = IntegerPropertySchema()) : ElicitationPropertySchema() + public data class BooleanValue(val schema: BooleanPropertySchema = BooleanPropertySchema()) : ElicitationPropertySchema() + public data class ArrayValue(val schema: MultiSelectPropertySchema) : ElicitationPropertySchema() +} + +@OptIn(UnstableApi::class) +internal object ElicitationPropertySchemaSerializer : KSerializer { + override val descriptor: SerialDescriptor = buildClassSerialDescriptor("ElicitationPropertySchema") + + override fun serialize(encoder: Encoder, value: ElicitationPropertySchema) { + val jsonEncoder = encoder as? JsonEncoder + ?: throw SerializationException("ElicitationPropertySchemaSerializer supports only JSON") + val (type, encodedSchema) = when (value) { + is ElicitationPropertySchema.StringValue -> ELICITATION_TYPE_STRING to ACPJson.encodeToJsonElement(StringPropertySchema.serializer(), value.schema).jsonObject + is ElicitationPropertySchema.NumberValue -> ELICITATION_TYPE_NUMBER to ACPJson.encodeToJsonElement(NumberPropertySchema.serializer(), value.schema).jsonObject + is ElicitationPropertySchema.IntegerValue -> ELICITATION_TYPE_INTEGER to ACPJson.encodeToJsonElement(IntegerPropertySchema.serializer(), value.schema).jsonObject + is ElicitationPropertySchema.BooleanValue -> ELICITATION_TYPE_BOOLEAN to ACPJson.encodeToJsonElement(BooleanPropertySchema.serializer(), value.schema).jsonObject + is ElicitationPropertySchema.ArrayValue -> ELICITATION_TYPE_ARRAY to ACPJson.encodeToJsonElement(MultiSelectPropertySchema.serializer(), value.schema).jsonObject + } + val payload = buildJsonObject { + put(ELICITATION_PROPERTY_TYPE_DISCRIMINATOR, type) + encodedSchema.forEach { (k, v) -> put(k, v) } + } + jsonEncoder.encodeJsonElement(payload) + } + + override fun deserialize(decoder: Decoder): ElicitationPropertySchema { + val jsonDecoder = decoder as? JsonDecoder + ?: throw SerializationException("ElicitationPropertySchemaSerializer supports only JSON") + val obj = jsonDecoder.decodeJsonElement().jsonObject + val type = obj[ELICITATION_PROPERTY_TYPE_DISCRIMINATOR]?.jsonPrimitive?.content + ?: throw SerializationException("Missing '$ELICITATION_PROPERTY_TYPE_DISCRIMINATOR' discriminator field") + + return when (type) { + ELICITATION_TYPE_STRING -> ElicitationPropertySchema.StringValue( + ACPJson.decodeFromJsonElement(StringPropertySchema.serializer(), obj) + ) + ELICITATION_TYPE_NUMBER -> ElicitationPropertySchema.NumberValue( + ACPJson.decodeFromJsonElement(NumberPropertySchema.serializer(), obj) + ) + ELICITATION_TYPE_INTEGER -> ElicitationPropertySchema.IntegerValue( + ACPJson.decodeFromJsonElement(IntegerPropertySchema.serializer(), obj) + ) + ELICITATION_TYPE_BOOLEAN -> ElicitationPropertySchema.BooleanValue( + ACPJson.decodeFromJsonElement(BooleanPropertySchema.serializer(), obj) + ) + ELICITATION_TYPE_ARRAY -> ElicitationPropertySchema.ArrayValue( + ACPJson.decodeFromJsonElement(MultiSelectPropertySchema.serializer(), obj) + ) + else -> throw SerializationException("Unknown elicitation property schema type: '$type'") + } + } +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Type-safe elicitation schema for requesting structured user input. + */ +@UnstableApi +@Serializable +public data class ElicitationSchema( + @EncodeDefault + val type: ElicitationSchemaType = ElicitationSchemaType.OBJECT, + val title: String? = null, + @EncodeDefault + val properties: Map = emptyMap(), + val required: List? = null, + val description: String? = null +) + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Elicitation capabilities supported by the client. + */ +@UnstableApi +@Serializable +public data class ElicitationCapabilities( + val form: ElicitationFormCapabilities? = null, + val url: ElicitationUrlCapabilities? = null, + 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. + * + * Form-based elicitation capabilities. + */ +@UnstableApi +@Serializable +public data class ElicitationFormCapabilities( + 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. + * + * URL-based elicitation capabilities. + */ +@UnstableApi +@Serializable +public data class ElicitationUrlCapabilities( + 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. + * + * The mode of elicitation, determining how user input is collected. + */ +@UnstableApi +@Serializable +@JsonClassDiscriminator(ELICITATION_MODE_DISCRIMINATOR) +public sealed class ElicitationMode { + @Serializable + @SerialName(ELICITATION_MODE_FORM) + public data class Form( + val requestedSchema: ElicitationSchema + ) : ElicitationMode() + + @Serializable + @SerialName(ELICITATION_MODE_URL) + public data class Url( + val elicitationId: ElicitationId, + val url: String + ) : ElicitationMode() +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Request from the agent to elicit structured user input. + */ +@UnstableApi +@Serializable(with = ElicitationRequestSerializer::class) +public data class ElicitationRequest( + override val sessionId: SessionId, + val mode: ElicitationMode, + val message: String, + override val _meta: JsonElement? = null +) : AcpRequest, AcpWithSessionId + +@OptIn(UnstableApi::class) +internal object ElicitationRequestSerializer : KSerializer { + // Kept custom intentionally: protocol flattens mode-specific fields into the request root + // (`mode` + `requestedSchema`/`elicitationId`/`url`), while public API keeps `mode` nested. + override val descriptor: SerialDescriptor = buildClassSerialDescriptor("ElicitationRequest") + + override fun serialize(encoder: Encoder, value: ElicitationRequest) { + val jsonEncoder = encoder as? JsonEncoder + ?: throw SerializationException("ElicitationRequestSerializer supports only JSON") + val encodedMode = ACPJson.encodeToJsonElement(ElicitationMode.serializer(), value.mode).jsonObject + val payload = buildJsonObject { + put(ELICITATION_REQUEST_SESSION_ID_FIELD, ACPJson.encodeToJsonElement(SessionId.serializer(), value.sessionId)) + put(ELICITATION_REQUEST_MESSAGE_FIELD, JsonPrimitive(value.message)) + encodedMode.forEach { (k, v) -> put(k, v) } + if (value._meta != null) put(ELICITATION_META_FIELD, value._meta) + } + jsonEncoder.encodeJsonElement(payload) + } + + override fun deserialize(decoder: Decoder): ElicitationRequest { + val jsonDecoder = decoder as? JsonDecoder + ?: throw SerializationException("ElicitationRequestSerializer supports only JSON") + val obj = jsonDecoder.decodeJsonElement().jsonObject + val sessionIdElement = obj[ELICITATION_REQUEST_SESSION_ID_FIELD] + ?: throw SerializationException("Missing '$ELICITATION_REQUEST_SESSION_ID_FIELD'") + val message = obj[ELICITATION_REQUEST_MESSAGE_FIELD]?.jsonPrimitive?.content + ?: throw SerializationException("Missing '$ELICITATION_REQUEST_MESSAGE_FIELD'") + val mode = ACPJson.decodeFromJsonElement(ElicitationMode.serializer(), obj) + return ElicitationRequest( + sessionId = ACPJson.decodeFromJsonElement(SessionId.serializer(), sessionIdElement), + mode = mode, + message = message, + _meta = obj[ELICITATION_META_FIELD] + ) + } +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Response from the client to an elicitation request. + */ +@UnstableApi +@Serializable +public data class ElicitationResponse( + val action: ElicitationAction, + 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. + * + * The user's action in response to an elicitation. + */ +@UnstableApi +@Serializable +@JsonClassDiscriminator(ELICITATION_ACTION_DISCRIMINATOR) +public sealed class ElicitationAction { + @Serializable + @SerialName(ELICITATION_ACTION_ACCEPT) + public data class Accept( + val content: Map? = null + ) : ElicitationAction() + + @Serializable + @SerialName(ELICITATION_ACTION_DECLINE) + public object Decline : ElicitationAction() + + @Serializable + @SerialName(ELICITATION_ACTION_CANCEL) + public object Cancel : ElicitationAction() +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * A typed value returned in accepted elicitation content. + */ +@UnstableApi +@Serializable(with = ElicitationContentValueSerializer::class) +public sealed class ElicitationContentValue { + public data class StringValue(val value: String) : ElicitationContentValue() + public data class IntegerValue(val value: Long) : ElicitationContentValue() + public data class NumberValue(val value: Double) : ElicitationContentValue() + public data class BooleanValue(val value: Boolean) : ElicitationContentValue() + public data class StringArrayValue(val value: List) : ElicitationContentValue() +} + +@OptIn(UnstableApi::class) +internal object ElicitationContentValueSerializer : KSerializer { + // Kept custom intentionally: wire format is untagged primitive/array values, not object wrappers. + override val descriptor: SerialDescriptor = buildClassSerialDescriptor("ElicitationContentValue") + + override fun serialize(encoder: Encoder, value: ElicitationContentValue) { + val jsonEncoder = encoder as? JsonEncoder + ?: throw SerializationException("ElicitationContentValueSerializer supports only JSON") + val element: JsonElement = when (value) { + is ElicitationContentValue.StringValue -> JsonPrimitive(value.value) + is ElicitationContentValue.IntegerValue -> JsonPrimitive(value.value) + is ElicitationContentValue.NumberValue -> JsonPrimitive(value.value) + is ElicitationContentValue.BooleanValue -> JsonPrimitive(value.value) + is ElicitationContentValue.StringArrayValue -> JsonArray(value.value.map(::JsonPrimitive)) + } + jsonEncoder.encodeJsonElement(element) + } + + override fun deserialize(decoder: Decoder): ElicitationContentValue { + val jsonDecoder = decoder as? JsonDecoder + ?: throw SerializationException("ElicitationContentValueSerializer supports only JSON") + val element = jsonDecoder.decodeJsonElement() + return when (element) { + is JsonPrimitive -> when { + element.isString -> ElicitationContentValue.StringValue(element.content) + element.booleanOrNull != null -> ElicitationContentValue.BooleanValue(element.boolean) + element.longOrNull != null -> ElicitationContentValue.IntegerValue(element.longOrNull!!) + element.doubleOrNull != null -> ElicitationContentValue.NumberValue(element.doubleOrNull!!) + else -> throw SerializationException("Unsupported primitive for ElicitationContentValue: $element") + } + is JsonArray -> { + val values = element.map { item -> + val primitive = item as? JsonPrimitive + ?: throw SerializationException("Expected string array values in ElicitationContentValue") + if (!primitive.isString) { + throw SerializationException("Expected string array values in ElicitationContentValue") + } + primitive.content + } + ElicitationContentValue.StringArrayValue(values) + } + else -> throw SerializationException("Unsupported value for ElicitationContentValue: $element") + } + } +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Notification sent by the agent when a URL-based elicitation is complete. + */ +@UnstableApi +@Serializable +public data class ElicitationCompleteNotification( + val elicitationId: ElicitationId, + override val _meta: JsonElement? = null +) : AcpNotification + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Data payload for a URL elicitation required error. + */ +@UnstableApi +@Serializable +public data class UrlElicitationRequiredData( + val elicitations: List +) + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Type discriminator for URL-only elicitation items. + */ +@UnstableApi +@Serializable +public enum class ElicitationUrlOnlyMode { + @SerialName(ELICITATION_MODE_URL) URL +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * A single URL elicitation item in URL-required error data. + */ +@UnstableApi +@Serializable +public data class UrlElicitationRequiredItem( + @EncodeDefault + val mode: ElicitationUrlOnlyMode = ElicitationUrlOnlyMode.URL, + val elicitationId: ElicitationId, + val url: String, + val message: String +) 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..e786647 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt @@ -41,7 +41,7 @@ public open class AcpMethod(public val methodName: MethodName) { } public object AgentMethods { - // Agent-side operations (methods that agents can call on clients) + // Agent-side operations (methods that clients can call on agents) public object Initialize : AcpRequestResponseMethod("initialize", InitializeRequest.serializer(), InitializeResponse.serializer()) public object Authenticate : AcpRequestResponseMethod("authenticate", AuthenticateRequest.serializer(), AuthenticateResponse.serializer()) public object SessionNew : AcpRequestResponseMethod("session/new", NewSessionRequest.serializer(), NewSessionResponse.serializer()) @@ -66,9 +66,13 @@ public open class AcpMethod(public val methodName: MethodName) { } public object ClientMethods { - // Client-side operations (methods that clients can call on agents) + // Client-side operations (methods that agents can call on clients) public object SessionRequestPermission : AcpSessionRequestResponseMethod("session/request_permission", RequestPermissionRequest.serializer(), RequestPermissionResponse.serializer()) public object SessionUpdate : AcpSessionNotificationMethod("session/update", SessionNotification.serializer()) + @UnstableApi + public object SessionElicitation : AcpSessionRequestResponseMethod("session/elicitation", ElicitationRequest.serializer(), ElicitationResponse.serializer()) + @UnstableApi + public object SessionElicitationComplete : AcpNotificationMethod("session/elicitation/complete", ElicitationCompleteNotification.serializer()) // extensions public object FsReadTextFile : AcpSessionRequestResponseMethod("fs/read_text_file", ReadTextFileRequest.serializer(), ReadTextFileResponse.serializer()) diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Types.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Types.kt index 9ed4673..0dc54c5 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Types.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Types.kt @@ -65,6 +65,20 @@ public value class PermissionOptionId(public val value: String) { override fun toString(): String = value } +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Unique identifier for an elicitation. + */ +@UnstableApi +@JvmInline +@Serializable +public value class ElicitationId(public val value: String) { + override fun toString(): String = value +} + /** * Unique identifier for a Session Mode. */ @@ -196,4 +210,4 @@ public data class SessionInfo( val title: String? = null, val updatedAt: String? = null, override val _meta: JsonElement? = null -) : AcpWithMeta \ No newline at end of file +) : AcpWithMeta diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/rpc/JsonRpc.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/rpc/JsonRpc.kt index 527c105..12b8afb 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/rpc/JsonRpc.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/rpc/JsonRpc.kt @@ -2,6 +2,7 @@ package com.agentclientprotocol.rpc +import com.agentclientprotocol.annotations.UnstableApi import com.agentclientprotocol.model.AvailableCommandInput import com.agentclientprotocol.model.McpServer import kotlinx.serialization.ExperimentalSerializationApi @@ -171,7 +172,12 @@ public enum class JsonRpcErrorCode(public val code: Int, public val message: Str /** A given resource, such as a file, was not found. * This is an ACP-specific error code in the reserved range. */ - RESOURCE_NOT_FOUND(-32002, "Resource not found") + RESOURCE_NOT_FOUND(-32002, "Resource not found"), + + /** The agent requires user input via URL-based elicitation before it can proceed. + * This is an ACP-specific unstable error code in the reserved range. */ + @UnstableApi + URL_ELICITATION_REQUIRED(-32042, "URL elicitation required") } private val acpSerializersModule = SerializersModule { diff --git a/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/ElicitationSerializationTest.kt b/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/ElicitationSerializationTest.kt new file mode 100644 index 0000000..e53605d --- /dev/null +++ b/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/ElicitationSerializationTest.kt @@ -0,0 +1,226 @@ +package com.agentclientprotocol.model + +import com.agentclientprotocol.annotations.UnstableApi +import com.agentclientprotocol.rpc.ACPJson +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue +import kotlin.test.fail + +@OptIn(UnstableApi::class) +class ElicitationSerializationTest { + + @Test + fun `form mode request serializes and deserializes`() { + val request = ElicitationRequest( + sessionId = SessionId("sess_1"), + mode = ElicitationMode.Form( + ElicitationSchema( + properties = mapOf( + "name" to ElicitationPropertySchema.StringValue() + ), + required = listOf("name") + ) + ), + message = "Please enter your name" + ) + + val json = ACPJson.encodeToJsonElement(ElicitationRequest.serializer(), request).jsonObject + assertEquals("sess_1", json["sessionId"]?.jsonPrimitive?.content) + assertEquals("form", json["mode"]?.jsonPrimitive?.content) + assertEquals("Please enter your name", json["message"]?.jsonPrimitive?.content) + assertEquals( + "string", + json["requestedSchema"]?.jsonObject + ?.get("properties")?.jsonObject + ?.get("name")?.jsonObject + ?.get("type")?.jsonPrimitive?.content + ) + + val roundtrip = ACPJson.decodeFromJsonElement(ElicitationRequest.serializer(), json) + assertEquals(SessionId("sess_1"), roundtrip.sessionId) + assertTrue(roundtrip.mode is ElicitationMode.Form) + } + + @Test + fun `url mode request serializes and deserializes`() { + val request = ElicitationRequest( + sessionId = SessionId("sess_2"), + mode = ElicitationMode.Url( + elicitationId = ElicitationId("elic_1"), + url = "https://example.com/auth" + ), + message = "Please authenticate" + ) + + val json = ACPJson.encodeToJsonElement(ElicitationRequest.serializer(), request).jsonObject + assertEquals("sess_2", json["sessionId"]?.jsonPrimitive?.content) + assertEquals("url", json["mode"]?.jsonPrimitive?.content) + assertEquals("elic_1", json["elicitationId"]?.jsonPrimitive?.content) + assertEquals("https://example.com/auth", json["url"]?.jsonPrimitive?.content) + + val roundtrip = ACPJson.decodeFromJsonElement(ElicitationRequest.serializer(), json) + assertTrue(roundtrip.mode is ElicitationMode.Url) + } + + @Test + fun `response accept serializes and deserializes`() { + val response = ElicitationResponse( + action = ElicitationAction.Accept( + content = mapOf( + "name" to ElicitationContentValue.StringValue("Alice"), + "age" to ElicitationContentValue.IntegerValue(30) + ) + ) + ) + + val json = ACPJson.encodeToJsonElement(ElicitationResponse.serializer(), response).jsonObject + assertEquals("accept", json["action"]?.jsonObject?.get("action")?.jsonPrimitive?.content) + assertEquals("Alice", json["action"]?.jsonObject?.get("content")?.jsonObject?.get("name")?.jsonPrimitive?.content) + assertEquals("30", json["action"]?.jsonObject?.get("content")?.jsonObject?.get("age")?.jsonPrimitive?.content) + + val roundtrip = ACPJson.decodeFromJsonElement(ElicitationResponse.serializer(), json) + assertTrue(roundtrip.action is ElicitationAction.Accept) + val content = (roundtrip.action as ElicitationAction.Accept).content + val name = content?.get("name") as? ElicitationContentValue.StringValue + assertEquals("Alice", name?.value) + } + + @Test + fun `response decline serializes and deserializes`() { + val response = ElicitationResponse(ElicitationAction.Decline) + + val json = ACPJson.encodeToJsonElement(ElicitationResponse.serializer(), response).jsonObject + assertEquals("decline", json["action"]?.jsonObject?.get("action")?.jsonPrimitive?.content) + + val roundtrip = ACPJson.decodeFromJsonElement(ElicitationResponse.serializer(), json) + assertTrue(roundtrip.action is ElicitationAction.Decline) + } + + @Test + fun `response cancel serializes and deserializes`() { + val response = ElicitationResponse(ElicitationAction.Cancel) + + val json = ACPJson.encodeToJsonElement(ElicitationResponse.serializer(), response).jsonObject + assertEquals("cancel", json["action"]?.jsonObject?.get("action")?.jsonPrimitive?.content) + + val roundtrip = ACPJson.decodeFromJsonElement(ElicitationResponse.serializer(), json) + assertTrue(roundtrip.action is ElicitationAction.Cancel) + } + + @Test + fun `completion notification serializes and deserializes`() { + val notification = ElicitationCompleteNotification( + elicitationId = ElicitationId("elic_1") + ) + + val json = ACPJson.encodeToJsonElement(ElicitationCompleteNotification.serializer(), notification).jsonObject + assertEquals("elic_1", json["elicitationId"]?.jsonPrimitive?.content) + + val roundtrip = ACPJson.decodeFromJsonElement(ElicitationCompleteNotification.serializer(), json) + assertEquals(ElicitationId("elic_1"), roundtrip.elicitationId) + } + + @Test + fun `capabilities form only serializes and deserializes`() { + val capabilities = ElicitationCapabilities( + form = ElicitationFormCapabilities() + ) + + val json = ACPJson.encodeToJsonElement(ElicitationCapabilities.serializer(), capabilities).jsonObject + assertNotNull(json["form"]) + assertEquals(null, json["url"]) + + val roundtrip = ACPJson.decodeFromJsonElement(ElicitationCapabilities.serializer(), json) + assertNotNull(roundtrip.form) + assertEquals(null, roundtrip.url) + } + + @Test + fun `url elicitation required data serializes and deserializes`() { + val data = UrlElicitationRequiredData( + elicitations = listOf( + UrlElicitationRequiredItem( + elicitationId = ElicitationId("elic_1"), + url = "https://example.com/auth", + message = "Authentication required" + ) + ) + ) + + val json = ACPJson.encodeToJsonElement(UrlElicitationRequiredData.serializer(), data).jsonObject + val first = json["elicitations"]!!.jsonArray.first().jsonObject + assertEquals("url", first["mode"]?.jsonPrimitive?.content) + assertEquals("elic_1", first["elicitationId"]?.jsonPrimitive?.content) + assertEquals("https://example.com/auth", first["url"]?.jsonPrimitive?.content) + + val roundtrip = ACPJson.decodeFromJsonElement(UrlElicitationRequiredData.serializer(), json) + assertEquals(1, roundtrip.elicitations.size) + assertEquals(ElicitationUrlOnlyMode.URL, roundtrip.elicitations.first().mode) + } + + @Test + fun `property schema array variants serialize and deserialize`() { + val untitled = ElicitationPropertySchema.ArrayValue( + MultiSelectPropertySchema( + items = MultiSelectItems.Untitled(values = listOf("a", "b")) + ) + ) + val untitledJson = ACPJson.encodeToJsonElement(ElicitationPropertySchema.serializer(), untitled).jsonObject + assertEquals("array", untitledJson["type"]?.jsonPrimitive?.content) + assertNotNull(untitledJson["items"]?.jsonObject?.get("enum")) + val untitledRoundtrip = ACPJson.decodeFromJsonElement(ElicitationPropertySchema.serializer(), untitledJson) + assertTrue(untitledRoundtrip is ElicitationPropertySchema.ArrayValue) + assertTrue(untitledRoundtrip.schema.items is MultiSelectItems.Untitled) + + val titled = ElicitationPropertySchema.ArrayValue( + MultiSelectPropertySchema( + items = MultiSelectItems.Titled( + options = listOf(EnumOption("x", "X")) + ) + ) + ) + val titledJson = ACPJson.encodeToJsonElement(ElicitationPropertySchema.serializer(), titled).jsonObject + assertEquals("array", titledJson["type"]?.jsonPrimitive?.content) + assertNotNull(titledJson["items"]?.jsonObject?.get("anyOf")) + val titledRoundtrip = ACPJson.decodeFromJsonElement(ElicitationPropertySchema.serializer(), titledJson) + assertTrue(titledRoundtrip is ElicitationPropertySchema.ArrayValue) + assertTrue(titledRoundtrip.schema.items is MultiSelectItems.Titled) + } + + @Test + fun `elicitation content value deserializes primitives and arrays`() { + val intValue = ACPJson.decodeFromString(ElicitationContentValue.serializer(), "42") + assertTrue(intValue is ElicitationContentValue.IntegerValue) + assertEquals(42L, intValue.value) + + val numberValue = ACPJson.decodeFromString(ElicitationContentValue.serializer(), "42.5") + assertTrue(numberValue is ElicitationContentValue.NumberValue) + assertEquals(42.5, numberValue.value) + + val boolValue = ACPJson.decodeFromString(ElicitationContentValue.serializer(), "true") + assertTrue(boolValue is ElicitationContentValue.BooleanValue) + assertEquals(true, boolValue.value) + + val stringValue = ACPJson.decodeFromString(ElicitationContentValue.serializer(), "\"hello\"") + assertTrue(stringValue is ElicitationContentValue.StringValue) + assertEquals("hello", stringValue.value) + + val stringArrayValue = ACPJson.decodeFromString(ElicitationContentValue.serializer(), "[\"a\",\"b\"]") + assertTrue(stringArrayValue is ElicitationContentValue.StringArrayValue) + assertEquals(listOf("a", "b"), stringArrayValue.value) + } + + @Test + fun `elicitation content value rejects non-string array entries`() { + try { + ACPJson.decodeFromString(ElicitationContentValue.serializer(), "[1,2]") + fail("Expected deserialization to fail for non-string array") + } catch (_: Exception) { + } + } +} diff --git a/acp/api/acp.api b/acp/api/acp.api index e43b2c2..c56a169 100644 --- a/acp/api/acp.api +++ b/acp/api/acp.api @@ -194,6 +194,12 @@ public final class com/agentclientprotocol/client/ClientSessionKt { public abstract interface class com/agentclientprotocol/common/ClientSessionOperations : com/agentclientprotocol/common/FileSystemOperations, com/agentclientprotocol/common/TerminalOperations { public abstract fun notify (Lcom/agentclientprotocol/model/SessionUpdate;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun notify$default (Lcom/agentclientprotocol/common/ClientSessionOperations;Lcom/agentclientprotocol/model/SessionUpdate;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public fun notifyElicitationComplete-U3LukvU (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun notifyElicitationComplete-U3LukvU$default (Lcom/agentclientprotocol/common/ClientSessionOperations;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun notifyElicitationComplete-U3LukvU$suspendImpl (Lcom/agentclientprotocol/common/ClientSessionOperations;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun requestElicitation (Lcom/agentclientprotocol/model/ElicitationMode;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun requestElicitation$default (Lcom/agentclientprotocol/common/ClientSessionOperations;Lcom/agentclientprotocol/model/ElicitationMode;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun requestElicitation$suspendImpl (Lcom/agentclientprotocol/common/ClientSessionOperations;Lcom/agentclientprotocol/model/ElicitationMode;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun requestPermissions (Lcom/agentclientprotocol/model/SessionUpdate$ToolCallUpdate;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun requestPermissions$default (Lcom/agentclientprotocol/common/ClientSessionOperations;Lcom/agentclientprotocol/model/SessionUpdate$ToolCallUpdate;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; } @@ -202,6 +208,10 @@ public final class com/agentclientprotocol/common/ClientSessionOperations$Defaul public static fun fsReadTextFile-i6TIkSo (Lcom/agentclientprotocol/common/ClientSessionOperations;Ljava/lang/String;Lkotlin/UInt;Lkotlin/UInt;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun fsWriteTextFile (Lcom/agentclientprotocol/common/ClientSessionOperations;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun notify$default (Lcom/agentclientprotocol/common/ClientSessionOperations;Lcom/agentclientprotocol/model/SessionUpdate;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static fun notifyElicitationComplete-U3LukvU (Lcom/agentclientprotocol/common/ClientSessionOperations;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun notifyElicitationComplete-U3LukvU$default (Lcom/agentclientprotocol/common/ClientSessionOperations;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static fun requestElicitation (Lcom/agentclientprotocol/common/ClientSessionOperations;Lcom/agentclientprotocol/model/ElicitationMode;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun requestElicitation$default (Lcom/agentclientprotocol/common/ClientSessionOperations;Lcom/agentclientprotocol/model/ElicitationMode;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public static synthetic fun requestPermissions$default (Lcom/agentclientprotocol/common/ClientSessionOperations;Lcom/agentclientprotocol/model/SessionUpdate$ToolCallUpdate;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public static fun terminalCreate-HNfBzwE (Lcom/agentclientprotocol/common/ClientSessionOperations;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/util/List;Lkotlin/ULong;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun terminalKill (Lcom/agentclientprotocol/common/ClientSessionOperations;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/RemoteClientSessionOperations.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/RemoteClientSessionOperations.kt index 947fb66..9a4cde4 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/RemoteClientSessionOperations.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/RemoteClientSessionOperations.kt @@ -1,11 +1,13 @@ package com.agentclientprotocol.agent +import com.agentclientprotocol.annotations.UnstableApi import com.agentclientprotocol.common.ClientSessionOperations import com.agentclientprotocol.model.* import com.agentclientprotocol.protocol.RpcMethodsOperations import com.agentclientprotocol.protocol.invoke import kotlinx.serialization.json.JsonElement +@OptIn(UnstableApi::class) internal class RemoteClientSessionOperations(private val rpc: RpcMethodsOperations, private val sessionId: SessionId, private val clientCapabilities: ClientCapabilities) : ClientSessionOperations { override suspend fun requestPermissions( toolCall: SessionUpdate.ToolCallUpdate, @@ -84,4 +86,46 @@ internal class RemoteClientSessionOperations(private val rpc: RpcMethodsOperatio if (!clientCapabilities.terminal) error("Client does not support terminal capability") return AcpMethod.ClientMethods.TerminalKill(rpc, KillTerminalCommandRequest(sessionId, terminalId, _meta)) } -} \ No newline at end of file + + override suspend fun requestElicitation( + mode: ElicitationMode, + message: String, + _meta: JsonElement? + ): ElicitationResponse { + when (mode) { + is ElicitationMode.Form -> { + if (!supportsFormElicitation()) { + error("Client does not support elicitation.form capability") + } + } + is ElicitationMode.Url -> { + if (!supportsUrlElicitation()) { + error("Client does not support elicitation.url capability") + } + } + } + return AcpMethod.ClientMethods.SessionElicitation(rpc, ElicitationRequest(sessionId, mode, message, _meta)) + } + + override suspend fun notifyElicitationComplete( + elicitationId: ElicitationId, + _meta: JsonElement? + ) { + if (!supportsUrlElicitation()) { + error("Client does not support elicitation.url capability") + } + AcpMethod.ClientMethods.SessionElicitationComplete(rpc, ElicitationCompleteNotification(elicitationId, _meta)) + } + + /** + * MCP-compatible semantics: empty elicitation object implies form-only support. + */ + private fun supportsFormElicitation(): Boolean { + val elicitation = clientCapabilities.elicitation ?: return false + return elicitation.form != null || (elicitation.form == null && elicitation.url == null) + } + + private fun supportsUrlElicitation(): Boolean { + return clientCapabilities.elicitation?.url != null + } +} diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt index b56f6c9..bc5dbb1 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt @@ -84,6 +84,8 @@ public class Client( private data class SessionsStorage(val initializingSessionsCount: Int = 0, val sessions: PersistentMap = persistentMapOf()) private val _sessions = atomic(SessionsStorage()) + @OptIn(UnstableApi::class) + private val _urlElicitationSessions = atomic(persistentMapOf()) /** * Creates a new entry only if there are some currently initializing sessions. Otherwise, throws in the case of missing session. @@ -116,6 +118,16 @@ public class Client( _sessions.update { currentMap -> currentMap.copy(sessions = currentMap.sessions.remove(sessionId)) } + @OptIn(UnstableApi::class) + _urlElicitationSessions.update { map -> + var updated = map + for ((elicitationId, mappedSessionId) in map) { + if (mappedSessionId == sessionId) { + updated = updated.remove(elicitationId) + } + } + updated + } } private val _clientInfo = CompletableDeferred() @@ -130,6 +142,38 @@ public class Client( } } + @OptIn(UnstableApi::class) + protocol.setRequestHandler(AcpMethod.ClientMethods.SessionElicitation) { params: ElicitationRequest -> + val session = getSessionOrThrow(params.sessionId) + val urlElicitationId = when (val mode = params.mode) { + is ElicitationMode.Url -> { + val elicitationId = mode.elicitationId + if (elicitationId.value.isBlank()) { + jsonRpcInvalidParams("Elicitation ID must be non-empty for URL mode") + } + elicitationId + } + is ElicitationMode.Form -> null + } + if (urlElicitationId != null) { + _urlElicitationSessions.update { it.put(urlElicitationId, params.sessionId) } + } + return@setRequestHandler session.executeWithSession { + try { + val response = session.operations.requestElicitation(params.mode, params.message, params._meta) + if (urlElicitationId != null && response.action !is ElicitationAction.Accept) { + _urlElicitationSessions.update { it.remove(urlElicitationId) } + } + response + } catch (t: Throwable) { + if (urlElicitationId != null) { + _urlElicitationSessions.update { it.remove(urlElicitationId) } + } + throw t + } + } + } + protocol.setRequestHandler(AcpMethod.ClientMethods.FsReadTextFile) { params -> val session = getSessionOrThrow(params.sessionId) val fs = session.operations as? FileSystemOperations @@ -197,6 +241,24 @@ public class Client( val sessionHolder = getOrCreateSessionHolder(params.sessionId) sessionHolder.handleOrQueue(params.update, params._meta) } + + @OptIn(UnstableApi::class) + protocol.setNotificationHandler(AcpMethod.ClientMethods.SessionElicitationComplete) { params: ElicitationCompleteNotification -> + var sessionId: SessionId? = null + _urlElicitationSessions.update { map -> + sessionId = map[params.elicitationId] + if (sessionId == null) map else map.remove(params.elicitationId) + } + if (sessionId == null) { + jsonRpcInvalidParams("Unknown URL elicitation ID: ${params.elicitationId}") + } + + val sessionHolder = getOrCreateSessionHolder(sessionId) + val session = sessionHolder.session.await() + session.executeWithSession { + session.operations.notifyElicitationComplete(params.elicitationId, params._meta) + } + } } public val clientInfo: ClientInfo @@ -440,4 +502,4 @@ public class Client( private inline fun sessionMethodNotFound(method: AcpMethod): Nothing { jsonRpcMethodNotFound("Session object does not implement ${TInterface::class.simpleName} to handle method $method") -} \ No newline at end of file +} diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/common/ClientSessionOperations.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/common/ClientSessionOperations.kt index 1c99b78..44531b0 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/common/ClientSessionOperations.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/common/ClientSessionOperations.kt @@ -1,5 +1,11 @@ package com.agentclientprotocol.common +import com.agentclientprotocol.annotations.UnstableApi +import com.agentclientprotocol.model.ElicitationAction +import com.agentclientprotocol.model.ElicitationCapabilities +import com.agentclientprotocol.model.ElicitationId +import com.agentclientprotocol.model.ElicitationMode +import com.agentclientprotocol.model.ElicitationResponse import com.agentclientprotocol.model.PermissionOption import com.agentclientprotocol.model.RequestPermissionResponse import com.agentclientprotocol.model.SessionUpdate @@ -26,4 +32,40 @@ public interface ClientSessionOperations : FileSystemOperations, TerminalOperati * Handles notification from an agent that is not bound to any prompt */ public suspend fun notify(notification: SessionUpdate, _meta: JsonElement? = null) + + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Requests structured user input from the client. + * + * This method corresponds to the `session/elicitation` request. + * Implement only when the client advertises [ElicitationCapabilities]. + */ + @UnstableApi + public suspend fun requestElicitation( + mode: ElicitationMode, + message: String, + _meta: JsonElement? = null + ): ElicitationResponse { + throw NotImplementedError("Must be implemented by client when advertising elicitation capability") + } + + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Handles optional completion notifications for URL-mode elicitation. + * + * This method corresponds to the `session/elicitation/complete` notification. + * It is usually sent after a URL flow was accepted with [ElicitationAction.Accept]. + */ + @UnstableApi + public suspend fun notifyElicitationComplete( + elicitationId: ElicitationId, + _meta: JsonElement? = null + ) { + } }