diff --git a/acp-model/api/acp-model.api b/acp-model/api/acp-model.api index a790417..3ab25c3 100644 --- a/acp-model/api/acp-model.api +++ b/acp-model/api/acp-model.api @@ -444,10 +444,10 @@ public final class com/agentclientprotocol/model/CancelNotification$Companion { public final class com/agentclientprotocol/model/CancelRequestNotification : com/agentclientprotocol/model/AcpNotification { public static final field Companion Lcom/agentclientprotocol/model/CancelRequestNotification$Companion; - public synthetic fun (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public synthetic fun (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getMessage ()Ljava/lang/String; - public final fun getRequestId-2bfd730 ()I + public final fun getRequestId ()Lcom/agentclientprotocol/rpc/RequestId; public fun get_meta ()Lkotlinx/serialization/json/JsonElement; } @@ -3163,16 +3163,16 @@ public final class com/agentclientprotocol/rpc/JsonRpcNotification$Companion { public final class com/agentclientprotocol/rpc/JsonRpcRequest : com/agentclientprotocol/rpc/JsonRpcMessage { public static final field Companion Lcom/agentclientprotocol/rpc/JsonRpcRequest$Companion; - public synthetic fun (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public synthetic fun (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1-2bfd730 ()I + public synthetic fun (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/rpc/RequestId; public final fun component2-6j0qeeA ()Ljava/lang/String; public final fun component3 ()Lkotlinx/serialization/json/JsonElement; public final fun component4 ()Ljava/lang/String; - public final fun copy-3p7Q8xk (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;)Lcom/agentclientprotocol/rpc/JsonRpcRequest; - public static synthetic fun copy-3p7Q8xk$default (Lcom/agentclientprotocol/rpc/JsonRpcRequest;ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/rpc/JsonRpcRequest; + public final fun copy-09H__7E (Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;)Lcom/agentclientprotocol/rpc/JsonRpcRequest; + public static synthetic fun copy-09H__7E$default (Lcom/agentclientprotocol/rpc/JsonRpcRequest;Lcom/agentclientprotocol/rpc/RequestId;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/rpc/JsonRpcRequest; public fun equals (Ljava/lang/Object;)Z - public final fun getId-2bfd730 ()I + public final fun getId ()Lcom/agentclientprotocol/rpc/RequestId; public final fun getJsonrpc ()Ljava/lang/String; public final fun getMethod-6j0qeeA ()Ljava/lang/String; public final fun getParams ()Lkotlinx/serialization/json/JsonElement; @@ -3197,17 +3197,17 @@ public final class com/agentclientprotocol/rpc/JsonRpcRequest$Companion { public final class com/agentclientprotocol/rpc/JsonRpcResponse : com/agentclientprotocol/rpc/JsonRpcMessage { public static final field Companion Lcom/agentclientprotocol/rpc/JsonRpcResponse$Companion; - public synthetic fun (ILkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public synthetic fun (ILkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1-2bfd730 ()I + public fun (Lcom/agentclientprotocol/rpc/RequestId;Lkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;)V + public synthetic fun (Lcom/agentclientprotocol/rpc/RequestId;Lkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lcom/agentclientprotocol/rpc/RequestId; public final fun component2 ()Lkotlinx/serialization/json/JsonElement; public final fun component3 ()Lcom/agentclientprotocol/rpc/JsonRpcError; public final fun component4 ()Ljava/lang/String; - public final fun copy-w48UGhM (ILkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;)Lcom/agentclientprotocol/rpc/JsonRpcResponse; - public static synthetic fun copy-w48UGhM$default (Lcom/agentclientprotocol/rpc/JsonRpcResponse;ILkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/rpc/JsonRpcResponse; + public final fun copy (Lcom/agentclientprotocol/rpc/RequestId;Lkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;)Lcom/agentclientprotocol/rpc/JsonRpcResponse; + public static synthetic fun copy$default (Lcom/agentclientprotocol/rpc/JsonRpcResponse;Lcom/agentclientprotocol/rpc/RequestId;Lkotlinx/serialization/json/JsonElement;Lcom/agentclientprotocol/rpc/JsonRpcError;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/rpc/JsonRpcResponse; public fun equals (Ljava/lang/Object;)Z public final fun getError ()Lcom/agentclientprotocol/rpc/JsonRpcError; - public final fun getId-2bfd730 ()I + public final fun getId ()Lcom/agentclientprotocol/rpc/RequestId; public final fun getJsonrpc ()Ljava/lang/String; public final fun getResult ()Lkotlinx/serialization/json/JsonElement; public fun hashCode ()I @@ -3259,33 +3259,14 @@ public final class com/agentclientprotocol/rpc/MethodName$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } -public final class com/agentclientprotocol/rpc/RequestId { +public abstract interface class com/agentclientprotocol/rpc/RequestId { public static final field Companion Lcom/agentclientprotocol/rpc/RequestId$Companion; - public static final synthetic fun box-impl (I)Lcom/agentclientprotocol/rpc/RequestId; - public static fun constructor-impl (I)I - public fun equals (Ljava/lang/Object;)Z - public static fun equals-impl (ILjava/lang/Object;)Z - public static final fun equals-impl0 (II)Z - public final fun getValue ()I - public fun hashCode ()I - public static fun hashCode-impl (I)I - public fun toString ()Ljava/lang/String; - public static fun toString-impl (I)Ljava/lang/String; - public final synthetic fun unbox-impl ()I -} - -public final synthetic class com/agentclientprotocol/rpc/RequestId$$serializer : kotlinx/serialization/internal/GeneratedSerializer { - public static final field INSTANCE Lcom/agentclientprotocol/rpc/RequestId$$serializer; - public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public final fun deserialize-xpv-AYA (Lkotlinx/serialization/encoding/Decoder;)I - public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V - public final fun serialize-mnwyFJI (Lkotlinx/serialization/encoding/Encoder;I)V - public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; + public abstract fun getValue ()Ljava/lang/Object; } public final class com/agentclientprotocol/rpc/RequestId$Companion { + public final fun create (I)Lcom/agentclientprotocol/rpc/RequestId; + public final fun create (Ljava/lang/String;)Lcom/agentclientprotocol/rpc/RequestId; public final fun serializer ()Lkotlinx/serialization/KSerializer; } 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 fec6d94..eaf103c 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/rpc/JsonRpc.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/rpc/JsonRpc.kt @@ -3,11 +3,19 @@ package com.agentclientprotocol.rpc import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable import kotlinx.serialization.SerializationException +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonDecoder import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive import kotlin.jvm.JvmInline /** @@ -17,13 +25,69 @@ public const val JSONRPC_VERSION: String = "2.0" /** * Request ID for JSON-RPC messages. + * Can be either an integer or a string according to JSON-RPC 2.0 spec. + */ +@Serializable(with = RequestIdSerializer::class) +public sealed interface RequestId { + public val value: Any + + public companion object { + public fun create(value: Int): RequestId = IntRequestId(value) + public fun create(value: String): RequestId = StringRequestId(value) + } +} + +/** + * Integer-based request ID. */ -@JvmInline @Serializable -public value class RequestId(public val value: Int) { +private data class IntRequestId(override val value: Int) : RequestId { override fun toString(): String = value.toString() } +/** + * String-based request ID. + */ +@Serializable +private data class StringRequestId(override val value: String) : RequestId { + override fun toString(): String = value +} + +/** + * Custom serializer for RequestId that handles both int and string values. + */ +internal object RequestIdSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("RequestId", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: RequestId) { + when (value) { + is IntRequestId -> encoder.encodeInt(value.value) + is StringRequestId -> encoder.encodeString(value.value) + } + } + + override fun deserialize(decoder: Decoder): RequestId { + val jsonDecoder = decoder as? JsonDecoder + ?: throw SerializationException("RequestId can only be deserialized from JSON") + + return when (val element = jsonDecoder.decodeJsonElement()) { + is JsonPrimitive -> { + if (element.isString) { + StringRequestId(element.content) + } else { + try { + IntRequestId(element.content.toInt()) + } catch (e: NumberFormatException) { + throw SerializationException("RequestId must be an int or string", e) + } + } + } + else -> throw SerializationException("RequestId must be a primitive (int or string)") + } + } +} + @JvmInline @Serializable public value class MethodName(public val name: String) diff --git a/acp-model/src/commonTest/kotlin/com/agentclientprotocol/rpc/RequestIdTest.kt b/acp-model/src/commonTest/kotlin/com/agentclientprotocol/rpc/RequestIdTest.kt new file mode 100644 index 0000000..cfdb2a5 --- /dev/null +++ b/acp-model/src/commonTest/kotlin/com/agentclientprotocol/rpc/RequestIdTest.kt @@ -0,0 +1,237 @@ +package com.agentclientprotocol.rpc + +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.JsonPrimitive +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertIs +import kotlin.test.assertTrue + +class RequestIdTest { + + @Test + fun `create Int RequestId using factory method`() { + val requestId = RequestId.create(42) + assertEquals(42, requestId.value) + assertEquals("42", requestId.toString()) + } + + @Test + fun `create String RequestId using factory method`() { + val requestId = RequestId.create("test-id-123") + assertEquals("test-id-123", requestId.value) + assertEquals("test-id-123", requestId.toString()) + } + + @Test + fun `serialize Int RequestId to JSON number`() { + val requestId = RequestId.create(42) + val request = JsonRpcRequest( + id = requestId, + method = MethodName("test.method") + ) + + val json = ACPJson.encodeToString(request) + assertTrue(json.contains("\"id\":42"), "Expected id to be serialized as number: $json") + } + + @Test + fun `serialize String RequestId to JSON string`() { + val requestId = RequestId.create("test-id-123") + val request = JsonRpcRequest( + id = requestId, + method = MethodName("test.method") + ) + + val json = ACPJson.encodeToString(request) + assertTrue(json.contains("\"id\":\"test-id-123\""), "Expected id to be serialized as string: $json") + } + + @Test + fun `deserialize JSON number to Int RequestId`() { + val json = """ + { + "jsonrpc": "2.0", + "id": 42, + "method": "test.method" + } + """.trimIndent() + + val request = ACPJson.decodeFromString(json) + assertEquals(42, request.id.value) + assertIs(request.id.value) + } + + @Test + fun `deserialize JSON string to String RequestId`() { + val json = """ + { + "jsonrpc": "2.0", + "id": "test-id-123", + "method": "test.method" + } + """.trimIndent() + + val request = ACPJson.decodeFromString(json) + assertEquals("test-id-123", request.id.value) + assertIs(request.id.value) + } + + @Test + fun `round-trip Int RequestId serialization`() { + val originalId = RequestId.create(999) + val request = JsonRpcRequest( + id = originalId, + method = MethodName("test.method"), + params = JsonPrimitive("test") + ) + + val json = ACPJson.encodeToString(request) + val decoded = ACPJson.decodeFromString(json) + + assertEquals(originalId.value, decoded.id.value) + assertEquals(originalId.toString(), decoded.id.toString()) + } + + @Test + fun `round-trip String RequestId serialization`() { + val originalId = RequestId.create("uuid-1234-5678") + val request = JsonRpcRequest( + id = originalId, + method = MethodName("test.method"), + params = JsonPrimitive("test") + ) + + val json = ACPJson.encodeToString(request) + val decoded = ACPJson.decodeFromString(json) + + assertEquals(originalId.value, decoded.id.value) + assertEquals(originalId.toString(), decoded.id.toString()) + } + + @Test + fun `JsonRpcResponse with Int RequestId`() { + val json = """ + { + "jsonrpc": "2.0", + "id": 123, + "result": {"status": "ok"} + } + """.trimIndent() + + val response = ACPJson.decodeFromString(json) + assertEquals(123, response.id.value) + assertIs(response.id.value) + } + + @Test + fun `JsonRpcResponse with String RequestId`() { + val json = """ + { + "jsonrpc": "2.0", + "id": "response-abc-123", + "result": {"status": "ok"} + } + """.trimIndent() + + val response = ACPJson.decodeFromString(json) + assertEquals("response-abc-123", response.id.value) + assertIs(response.id.value) + } + + @Test + fun `decodeJsonRpcMessage with Int RequestId`() { + val json = """ + { + "jsonrpc": "2.0", + "id": 42, + "method": "test.method" + } + """.trimIndent() + + val message = decodeJsonRpcMessage(json) + assertIs(message) + assertEquals(42, message.id.value) + } + + @Test + fun `decodeJsonRpcMessage with String RequestId`() { + val json = """ + { + "jsonrpc": "2.0", + "id": "message-id-xyz", + "method": "test.method" + } + """.trimIndent() + + val message = decodeJsonRpcMessage(json) + assertIs(message) + assertEquals("message-id-xyz", message.id.value) + } + + @Test + fun `multiple Int RequestIds with different values`() { + val id1 = RequestId.create(1) + val id2 = RequestId.create(2) + val id3 = RequestId.create(100) + + assertEquals(1, id1.value) + assertEquals(2, id2.value) + assertEquals(100, id3.value) + } + + @Test + fun `multiple String RequestIds with different values`() { + val id1 = RequestId.create("first") + val id2 = RequestId.create("second") + val id3 = RequestId.create("third") + + assertEquals("first", id1.value) + assertEquals("second", id2.value) + assertEquals("third", id3.value) + } + + @Test + fun `RequestId with negative integer`() { + val requestId = RequestId.create(-1) + assertEquals(-1, requestId.value) + + val request = JsonRpcRequest(id = requestId, method = MethodName("test")) + val json = ACPJson.encodeToString(request) + val decoded = ACPJson.decodeFromString(json) + + assertEquals(-1, decoded.id.value) + } + + @Test + fun `RequestId with zero`() { + val requestId = RequestId.create(0) + assertEquals(0, requestId.value) + + val request = JsonRpcRequest(id = requestId, method = MethodName("test")) + val json = ACPJson.encodeToString(request) + val decoded = ACPJson.decodeFromString(json) + + assertEquals(0, decoded.id.value) + } + + @Test + fun `RequestId with empty string`() { + val requestId = RequestId.create("") + assertEquals("", requestId.value) + assertEquals("", requestId.toString()) + } + + @Test + fun `RequestId with special characters in string`() { + val specialId = "test-id_123!@#$%" + val requestId = RequestId.create(specialId) + assertEquals(specialId, requestId.value) + + val request = JsonRpcRequest(id = requestId, method = MethodName("test")) + val json = ACPJson.encodeToString(request) + val decoded = ACPJson.decodeFromString(json) + + assertEquals(specialId, decoded.id.value) + } +} diff --git a/acp/api/acp.api b/acp/api/acp.api index 6474bf5..f75626e 100644 --- a/acp/api/acp.api +++ b/acp/api/acp.api @@ -260,8 +260,8 @@ public final class com/agentclientprotocol/protocol/JsonRpcException : java/lang public final class com/agentclientprotocol/protocol/Protocol : com/agentclientprotocol/protocol/RpcMethodsOperations { public fun (Lkotlinx/coroutines/CoroutineScope;Lcom/agentclientprotocol/transport/Transport;Lcom/agentclientprotocol/protocol/ProtocolOptions;)V public synthetic fun (Lkotlinx/coroutines/CoroutineScope;Lcom/agentclientprotocol/transport/Transport;Lcom/agentclientprotocol/protocol/ProtocolOptions;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun cancelPendingIncomingRequest-K1QyyPk (ILjava/util/concurrent/CancellationException;)V - public static synthetic fun cancelPendingIncomingRequest-K1QyyPk$default (Lcom/agentclientprotocol/protocol/Protocol;ILjava/util/concurrent/CancellationException;ILjava/lang/Object;)V + public final fun cancelPendingIncomingRequest (Lcom/agentclientprotocol/rpc/RequestId;Ljava/util/concurrent/CancellationException;)V + public static synthetic fun cancelPendingIncomingRequest$default (Lcom/agentclientprotocol/protocol/Protocol;Lcom/agentclientprotocol/rpc/RequestId;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V public final fun cancelPendingIncomingRequests (Ljava/util/concurrent/CancellationException;)V public static synthetic fun cancelPendingIncomingRequests$default (Lcom/agentclientprotocol/protocol/Protocol;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V public final fun cancelPendingOutgoingRequests (Ljava/util/concurrent/CancellationException;)V diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/protocol/Protocol.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/protocol/Protocol.kt index 4f72566..b372ab5 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/protocol/Protocol.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/protocol/Protocol.kt @@ -184,7 +184,7 @@ public class Protocol( method: MethodName, params: JsonElement? ): JsonElement { - val requestId = OutgoingRequestId(RequestId(requestIdCounter.incrementAndGet())) + val requestId = OutgoingRequestId(RequestId.create(requestIdCounter.incrementAndGet())) val deferred = CompletableDeferred() pendingOutgoingRequests.update { it.put(requestId, deferred) } diff --git a/acp/src/jvmTest/kotlin/com/agentclientprotocol/transport/StdioTransportTest.kt b/acp/src/jvmTest/kotlin/com/agentclientprotocol/transport/StdioTransportTest.kt index 4024cce..844d2b1 100644 --- a/acp/src/jvmTest/kotlin/com/agentclientprotocol/transport/StdioTransportTest.kt +++ b/acp/src/jvmTest/kotlin/com/agentclientprotocol/transport/StdioTransportTest.kt @@ -84,13 +84,13 @@ class StdioTransportTest { @Test fun `should read JSON-RPC request from input`(): Unit = runBlocking { val testMethod = MethodName("test.method") - transport.send(JsonRpcRequest(RequestId(1), testMethod, JsonPrimitive("value"))) + transport.send(JsonRpcRequest(RequestId.create(1), testMethod, JsonPrimitive("value"))) // Read the message from the transport val message = messages.receive() assertTrue(message is JsonRpcRequest) - assertEquals(RequestId(1), message.id) + assertEquals(RequestId.create(1), message.id) assertEquals(testMethod, message.method) assertNotNull(message.params) } @@ -109,13 +109,13 @@ class StdioTransportTest { @Test fun `should read JSON-RPC response from input`(): Unit = runBlocking { - transport.send(JsonRpcResponse(RequestId(42), result = JsonPrimitive("success"))) + transport.send(JsonRpcResponse(RequestId.create(42), result = JsonPrimitive("success"))) // Read the message from the transport val message = messages.receive() assertTrue(message is JsonRpcResponse) - assertEquals(RequestId(42), message.id) + assertEquals(RequestId.create(42), message.id) assertEquals(JsonPrimitive("success"), message.result) } @@ -124,9 +124,9 @@ class StdioTransportTest { val method1 = MethodName("method1") val notification1 = MethodName("notification1") - transport.send(JsonRpcRequest(RequestId(1), method1)) + transport.send(JsonRpcRequest(RequestId.create(1), method1)) transport.send(JsonRpcNotification(method = notification1)) - transport.send(JsonRpcResponse(RequestId(2), result = JsonPrimitive("ok"))) + transport.send(JsonRpcResponse(RequestId.create(2), result = JsonPrimitive("ok"))) val message1 = messages.receive() val message2 = messages.receive() @@ -139,7 +139,7 @@ class StdioTransportTest { assertEquals(notification1, message2.method) assertTrue(message3 is JsonRpcResponse) - assertEquals(RequestId(2), message3.id) + assertEquals(RequestId.create(2), message3.id) } @Test @@ -147,8 +147,8 @@ class StdioTransportTest { val firstMethod = MethodName("first") val secondMethod = MethodName("second") - transport.send(JsonRpcRequest(RequestId(1), firstMethod)) - transport.send(JsonRpcRequest(RequestId(2), secondMethod)) + transport.send(JsonRpcRequest(RequestId.create(1), firstMethod)) + transport.send(JsonRpcRequest(RequestId.create(2), secondMethod)) val message1 = messages.receive() assertTrue(message1 is JsonRpcRequest) @@ -209,7 +209,7 @@ class StdioTransportTest { launch { var i = 0 while (transport.state.value != Transport.State.CLOSED) { - transport.send(JsonRpcRequest(RequestId(i++), testMethod)) + transport.send(JsonRpcRequest(RequestId.create(i++), testMethod)) delay(10.milliseconds) } } @@ -221,7 +221,7 @@ class StdioTransportTest { @Test fun `should handle end of stream gracefully`(): Unit = runBlocking { val testMethod = MethodName("test") - transport.send(JsonRpcRequest(RequestId(1), testMethod)) + transport.send(JsonRpcRequest(RequestId.create(1), testMethod)) val message = messages.receive() assertTrue(message is JsonRpcRequest) diff --git a/build.gradle.kts b/build.gradle.kts index 3605c69..4eebce5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { private val buildNumber: String? = System.getenv("GITHUB_RUN_NUMBER") private val isReleasePublication = System.getenv("RELEASE_PUBLICATION")?.toBoolean() ?: false -private val baseVersion = "0.9.2" +private val baseVersion = "0.10.1" allprojects { group = "com.agentclientprotocol"