Skip to content

Commit 3d6c714

Browse files
authored
N500/wrap exception 2 (#14)
* Wrap exception from deferred to capture the current stack trace * Use CopyableThrowable to support stacktrace recovery
1 parent 070a3d1 commit 3d6c714

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

acp/api/acp.api

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,15 +206,21 @@ public final class com/agentclientprotocol/common/SessionParameters {
206206
public final fun get_meta ()Lkotlinx/serialization/json/JsonElement;
207207
}
208208

209-
public final class com/agentclientprotocol/protocol/AcpExpectedError : java/lang/Exception {
209+
public final class com/agentclientprotocol/protocol/AcpExpectedError : java/lang/Exception, kotlinx/coroutines/CopyableThrowable {
210210
public fun <init> (Ljava/lang/String;)V
211+
public fun createCopy ()Lcom/agentclientprotocol/protocol/AcpExpectedError;
212+
public synthetic fun createCopy ()Ljava/lang/Throwable;
213+
public fun getMessage ()Ljava/lang/String;
211214
}
212215

213-
public final class com/agentclientprotocol/protocol/JsonRpcException : java/lang/Exception {
216+
public final class com/agentclientprotocol/protocol/JsonRpcException : java/lang/Exception, kotlinx/coroutines/CopyableThrowable {
214217
public fun <init> (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;)V
215218
public synthetic fun <init> (ILjava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
219+
public fun createCopy ()Lcom/agentclientprotocol/protocol/JsonRpcException;
220+
public synthetic fun createCopy ()Ljava/lang/Throwable;
216221
public final fun getCode ()I
217222
public final fun getData ()Lkotlinx/serialization/json/JsonElement;
223+
public fun getMessage ()Ljava/lang/String;
218224
}
219225

220226
public final class com/agentclientprotocol/protocol/Protocol : com/agentclientprotocol/protocol/RpcMethodsOperations {
@@ -262,10 +268,6 @@ public final class com/agentclientprotocol/protocol/Protocol_extensionsKt {
262268
public static synthetic fun setRequestHandler$default (Lcom/agentclientprotocol/protocol/RpcMethodsOperations;Lcom/agentclientprotocol/model/AcpMethod$AcpRequestResponseMethod;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V
263269
}
264270

265-
public final class com/agentclientprotocol/protocol/RequestTimeoutException : java/lang/Exception {
266-
public fun <init> (Ljava/lang/String;)V
267-
}
268-
269271
public abstract interface class com/agentclientprotocol/protocol/RpcMethodsOperations {
270272
public abstract fun sendNotificationRaw (Lcom/agentclientprotocol/model/AcpMethod$AcpNotificationMethod;Lkotlinx/serialization/json/JsonElement;)V
271273
public static synthetic fun sendNotificationRaw$default (Lcom/agentclientprotocol/protocol/RpcMethodsOperations;Lcom/agentclientprotocol/model/AcpMethod$AcpNotificationMethod;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)V

acp/src/commonMain/kotlin/com/agentclientprotocol/protocol/Protocol.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ internal value class OutgoingRequestId(val id: RequestId)
3232
/**
3333
* An exception that gracefully handled and passed to the counterpart.
3434
*/
35-
public class AcpExpectedError(message: String) : Exception(message)
35+
@OptIn(ExperimentalCoroutinesApi::class)
36+
public class AcpExpectedError(override val message: String) : Exception(message), CopyableThrowable<AcpExpectedError> {
37+
override fun createCopy(): AcpExpectedError = AcpExpectedError(message).also { it.addSuppressed(this) }
38+
}
3639

3740
/**
3841
* Throws [AcpExpectedError] that gracefully handled and passed to the counterpart.
@@ -42,19 +45,17 @@ public fun acpFail(message: String): Nothing = throw AcpExpectedError(message)
4245
public fun jsonRpcMethodNotFound(message: String): Nothing =
4346
throw JsonRpcException(JsonRpcErrorCode.METHOD_NOT_FOUND, message)
4447

45-
/**
46-
* Exception thrown when a request times out.
47-
*/
48-
public class RequestTimeoutException(message: String) : Exception(message)
49-
5048
/**
5149
* Exception thrown for JSON-RPC protocol errors.
5250
*/
51+
@OptIn(ExperimentalCoroutinesApi::class)
5352
public class JsonRpcException(
5453
public val code: Int,
55-
message: String,
54+
public override val message: String,
5655
public val data: JsonElement? = null
57-
) : Exception(message)
56+
) : Exception(message), CopyableThrowable<JsonRpcException> {
57+
override fun createCopy(): JsonRpcException = JsonRpcException(code, message, data).also { it.addSuppressed(this) }
58+
}
5859

5960
/**
6061
* Exception thrown when a request is cancelled explicitly by invoking [AcpMethod.MetaMethods.CancelRequest] from the calling site

0 commit comments

Comments
 (0)