diff --git a/acp-model/api/acp-model.api b/acp-model/api/acp-model.api index 903379f..a429652 100644 --- a/acp-model/api/acp-model.api +++ b/acp-model/api/acp-model.api @@ -3765,15 +3765,17 @@ public final class com/agentclientprotocol/model/ToolCallContent$Content$Compani public final class com/agentclientprotocol/model/ToolCallContent$Diff : com/agentclientprotocol/model/ToolCallContent, com/agentclientprotocol/model/AcpWithMeta { public static final field Companion Lcom/agentclientprotocol/model/ToolCallContent$Diff$Companion; - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlinx/serialization/json/JsonElement;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/String; - public final fun component4 ()Lkotlinx/serialization/json/JsonElement; - public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ToolCallContent$Diff; - public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ToolCallContent$Diff;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ToolCallContent$Diff; + public final fun component4 ()Z + public final fun component5 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ToolCallContent$Diff; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ToolCallContent$Diff;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ToolCallContent$Diff; public fun equals (Ljava/lang/Object;)Z + public final fun getDeleted ()Z public final fun getNewText ()Ljava/lang/String; public final fun getOldText ()Ljava/lang/String; public final fun getPath ()Ljava/lang/String; diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/ToolCall.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/ToolCall.kt index 5b2a9c4..30899ad 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/ToolCall.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/ToolCall.kt @@ -86,6 +86,7 @@ public sealed class ToolCallContent { val path: String, val newText: String, val oldText: String? = null, + val deleted: Boolean = false, override val _meta: JsonElement? = null ) : ToolCallContent(), AcpWithMeta diff --git a/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/SerializationTests.kt b/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/SerializationTests.kt index f5c00ed..b2c80eb 100644 --- a/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/SerializationTests.kt +++ b/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/SerializationTests.kt @@ -3,6 +3,7 @@ package com.agentclientprotocol.model import com.agentclientprotocol.rpc.ACPJson import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertFalse import kotlin.test.assertTrue class SerializationTests { @@ -140,4 +141,60 @@ class SerializationTests { assertEquals(500000L, update.size) assertEquals(null, update.cost) } -} + + @Test + fun `decodes diff without deleted flag defaulting to false`() { + val payload = """ + { + "type": "diff", + "path": "/home/user/project/src/main.kt", + "oldText": "fun main() {}", + "newText": "" + } + """.trimIndent() + + val content = ACPJson.decodeFromString(ToolCallContent.serializer(), payload) + + assertTrue(content is ToolCallContent.Diff) + assertEquals("/home/user/project/src/main.kt", content.path) + assertEquals("fun main() {}", content.oldText) + assertEquals("", content.newText) + assertFalse(content.deleted) + } + + @Test + fun `decodes diff with deleted true`() { + val payload = """ + { + "type": "diff", + "path": "/home/user/project/src/main.kt", + "oldText": "fun main() {}", + "newText": "", + "deleted": true + } + """.trimIndent() + + val content = ACPJson.decodeFromString(ToolCallContent.serializer(), payload) + + assertTrue(content is ToolCallContent.Diff) + assertTrue(content.deleted) + } + + @Test + fun `decodes diff with deleted false`() { + val payload = """ + { + "type": "diff", + "path": "/home/user/project/src/main.kt", + "oldText": "fun main() {}", + "newText": "", + "deleted": false + } + """.trimIndent() + + val content = ACPJson.decodeFromString(ToolCallContent.serializer(), payload) + + assertTrue(content is ToolCallContent.Diff) + assertFalse(content.deleted) + } +} \ No newline at end of file