From 7b963df991051ec91fe2e7666e68a662c46ca96f Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Fri, 10 Apr 2026 18:41:13 +0800 Subject: [PATCH] refactor(exception): establish new exception system, and move the legacy into deprecated package --- .../VectorClientExecuteException.java | 2 +- .../VectorClientLoadFailedException.java | 2 +- .../exception/ActionInitFailedException.java | 2 +- .../ActionSerializeFailedException.java | 2 +- .../MetaActionNotFoundException.java | 2 +- .../slhaf/partner/framework/agent/Agent.java | 2 +- .../framework/agent/config/ConfigCenter.kt | 2 +- .../agent/exception/AgentRuntimeException.kt | 56 +++++++-- .../agent/exception/AgentStartupException.kt | 25 ++++ .../AgentLaunchFailedException.java | 3 +- .../AgentRunningFailedException.java | 3 +- .../deprecated/AgentRuntimeException.java | 12 ++ .../framework/agent/exception/exception.kt | 110 ++++++++++++++++++ .../CapabilityCheckFailedException.java | 2 +- ...pabilityFactoryExecuteFailedException.java | 2 +- .../ProxiedModuleRunningException.java | 2 +- .../ConfigFactoryInitFailedException.java | 2 +- .../ConfigFactoryRuntimeException.java | 2 +- .../agent/factory/context/AgentContext.kt | 2 +- 19 files changed, 213 insertions(+), 22 deletions(-) create mode 100644 Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentStartupException.kt rename Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/{ => deprecated}/AgentLaunchFailedException.java (80%) rename Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/{ => deprecated}/AgentRunningFailedException.java (78%) create mode 100644 Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentRuntimeException.java create mode 100644 Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/exception.kt diff --git a/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientExecuteException.java b/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientExecuteException.java index cfefcd90..4796b93c 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientExecuteException.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientExecuteException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.common.vector.exception; -import work.slhaf.partner.framework.agent.exception.AgentRuntimeException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentRuntimeException; public class VectorClientExecuteException extends AgentRuntimeException { diff --git a/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientLoadFailedException.java b/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientLoadFailedException.java index 53c58cea..c173c32b 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientLoadFailedException.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/common/vector/exception/VectorClientLoadFailedException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.common.vector.exception; -import work.slhaf.partner.framework.agent.exception.AgentRuntimeException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentRuntimeException; public class VectorClientLoadFailedException extends AgentRuntimeException { diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/ActionInitFailedException.java b/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/ActionInitFailedException.java index 26c6db12..a69c292a 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/ActionInitFailedException.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/ActionInitFailedException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.core.action.exception; -import work.slhaf.partner.framework.agent.exception.AgentLaunchFailedException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentLaunchFailedException; public class ActionInitFailedException extends AgentLaunchFailedException { public ActionInitFailedException(String message, Throwable cause) { diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/ActionSerializeFailedException.java b/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/ActionSerializeFailedException.java index 409ec19e..cc65387e 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/ActionSerializeFailedException.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/ActionSerializeFailedException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.core.action.exception; -import work.slhaf.partner.framework.agent.exception.AgentRuntimeException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentRuntimeException; public class ActionSerializeFailedException extends AgentRuntimeException { public ActionSerializeFailedException(String message) { diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/MetaActionNotFoundException.java b/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/MetaActionNotFoundException.java index 13074a2e..2bacc00c 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/MetaActionNotFoundException.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/action/exception/MetaActionNotFoundException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.core.action.exception; -import work.slhaf.partner.framework.agent.exception.AgentRuntimeException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentRuntimeException; public class MetaActionNotFoundException extends AgentRuntimeException { public MetaActionNotFoundException(String message) { diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/Agent.java b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/Agent.java index 4c7bed08..ddda3707 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/Agent.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/Agent.java @@ -3,7 +3,7 @@ package work.slhaf.partner.framework.agent; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.framework.agent.config.ConfigCenter; -import work.slhaf.partner.framework.agent.exception.AgentLaunchFailedException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentLaunchFailedException; import work.slhaf.partner.framework.agent.factory.AgentRegisterFactory; import work.slhaf.partner.framework.agent.factory.context.AgentContext; import work.slhaf.partner.framework.agent.interaction.AgentGatewayRegistration; diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/config/ConfigCenter.kt b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/config/ConfigCenter.kt index b37e6be7..38c43159 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/config/ConfigCenter.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/config/ConfigCenter.kt @@ -3,7 +3,7 @@ package work.slhaf.partner.framework.agent.config import com.alibaba.fastjson2.JSON import com.alibaba.fastjson2.JSONObject import org.slf4j.LoggerFactory -import work.slhaf.partner.framework.agent.exception.AgentLaunchFailedException +import work.slhaf.partner.framework.agent.exception.deprecated.AgentLaunchFailedException import work.slhaf.partner.framework.agent.support.DirectoryWatchSupport import java.io.IOException import java.lang.reflect.Field diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentRuntimeException.kt b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentRuntimeException.kt index d3a46cbe..b921ec14 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentRuntimeException.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentRuntimeException.kt @@ -1,11 +1,53 @@ -package work.slhaf.partner.framework.agent.exception; +package work.slhaf.partner.framework.agent.exception -public class AgentRuntimeException extends RuntimeException { - public AgentRuntimeException(String message) { - super("Agent 执行出错 " + message); - } +import work.slhaf.partner.framework.agent.factory.component.abstracts.AbstractAgentModule - public AgentRuntimeException(String message, Throwable cause) { - super("Agent 执行出错 " + message, cause); +open class AgentRuntimeException @JvmOverloads constructor( + message: String, + cause: Throwable? = null +) : AgentException(message, cause) + +open class ModuleExecutionException @JvmOverloads constructor( + message: String, + val moduleType: Class, + val moduleName: String, + cause: Throwable? = null +) : AgentRuntimeException(message, cause) { + override fun toReport(): ExceptionReport = super.toReport().also { + it.extra["moduleType"] = moduleType + it.extra["moduleName"] = moduleName + } +} + +open class InteractionException @JvmOverloads constructor( + message: String, + cause: Throwable? = null +) : AgentRuntimeException(message, cause) + +open class GatewayException @JvmOverloads constructor( + message: String, + val gatewayName: String, + cause: Throwable? = null +) : InteractionException(message, cause) { + override fun toReport(): ExceptionReport = super.toReport().also { + it.extra["gatewayName"] = gatewayName + } +} + +open class ModelInvokeException( + message: String, + val providerName: String, + val modelKey: String, + val baseUrl: String, + val model: String, + val override: Map = emptyMap(), + cause: Throwable? = null +) : AgentRuntimeException(message, cause) { + override fun toReport(): ExceptionReport = super.toReport().also { + it.extra["providerName"] = providerName + it.extra["modelKey"] = modelKey + it.extra["baseUrl"] = baseUrl + it.extra["model"] = model + it.extra["override"] = override } } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentStartupException.kt b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentStartupException.kt new file mode 100644 index 00000000..2cf38581 --- /dev/null +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentStartupException.kt @@ -0,0 +1,25 @@ +package work.slhaf.partner.framework.agent.exception + +open class AgentStartupException @JvmOverloads constructor( + message: String, + val relatedComponent: String, + cause: Throwable? = null +) : AgentException(message, cause) { + override fun toReport(): ExceptionReport { + val report = super.toReport() + report.extra["relatedComponent"] = relatedComponent + return report + } +} + +open class FactoryExecutionException @JvmOverloads constructor( + message: String, + val factoryName: String, + cause: Throwable? = null +) : AgentStartupException(message, "agent-register-factory", cause) { + override fun toReport(): ExceptionReport { + val report = super.toReport() + report.extra["factoryName"] = factoryName + return report + } +} diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentLaunchFailedException.java b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentLaunchFailedException.java similarity index 80% rename from Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentLaunchFailedException.java rename to Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentLaunchFailedException.java index 934f565f..ca4a6924 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentLaunchFailedException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentLaunchFailedException.java @@ -1,5 +1,6 @@ -package work.slhaf.partner.framework.agent.exception; +package work.slhaf.partner.framework.agent.exception.deprecated; +@Deprecated public class AgentLaunchFailedException extends RuntimeException { public AgentLaunchFailedException(String message, Throwable cause) { super("Agent 启动失败 " + message, cause); diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentRunningFailedException.java b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentRunningFailedException.java similarity index 78% rename from Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentRunningFailedException.java rename to Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentRunningFailedException.java index ded2fbe9..ec9b126a 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/AgentRunningFailedException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentRunningFailedException.java @@ -1,5 +1,6 @@ -package work.slhaf.partner.framework.agent.exception; +package work.slhaf.partner.framework.agent.exception.deprecated; +@Deprecated public class AgentRunningFailedException extends AgentRuntimeException { public AgentRunningFailedException(String message) { super(message); diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentRuntimeException.java b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentRuntimeException.java new file mode 100644 index 00000000..43fdd398 --- /dev/null +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/deprecated/AgentRuntimeException.java @@ -0,0 +1,12 @@ +package work.slhaf.partner.framework.agent.exception.deprecated; + +@Deprecated +public class AgentRuntimeException extends RuntimeException { + public AgentRuntimeException(String message) { + super("Agent 执行出错 " + message); + } + + public AgentRuntimeException(String message, Throwable cause) { + super("Agent 执行出错 " + message, cause); + } +} diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/exception.kt b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/exception.kt new file mode 100644 index 00000000..93f71a54 --- /dev/null +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/exception/exception.kt @@ -0,0 +1,110 @@ +package work.slhaf.partner.framework.agent.exception + +import com.alibaba.fastjson2.JSONObject +import org.slf4j.LoggerFactory + +abstract class AgentException @JvmOverloads constructor( + message: String, + cause: Throwable? = null +) : RuntimeException(message, cause) { + open fun toReport(): ExceptionReport { + return ExceptionReport( + this::class.java.simpleName, + message ?: "", + cause + ) + } +} + +data class ExceptionReport @JvmOverloads constructor( + val type: String, + val message: String, + val cause: Throwable? = null, + val extra: MutableMap = linkedMapOf() +) { + + override fun toString(): String { + val causeType = cause?.javaClass?.simpleName ?: "" + val causeMessage = cause?.message ?: "" + return """type: $type, + |message: $message, + |causeType: $causeType, + |cause: $causeMessage, + |extra: ${JSONObject.toJSONString(extra)} + """.trimMargin() + } + + fun toDetailedString(): String { + return buildString { + appendLine(toString()) + val stackTrace = cause?.stackTraceToString() + if (!stackTrace.isNullOrBlank()) { + appendLine("stackTrace:") + appendLine(stackTrace) + } + } + } +} + +object ExceptionReporterHandler { + + private val registry = mutableMapOf() + + private val log = LoggerFactory.getLogger(this::class.java) + + fun register(reporter: ExceptionReporter) { + val previous = registry.putIfAbsent(reporter.reporterName(), reporter) + checkAgentStartup(previous == null || previous === reporter) { + AgentStartupException( + "Exception reporter already registered: ${reporter.reporterName()}", + "exception-reporter-handler" + ) + } + } + + fun report(exception: AgentException, vararg reporters: String) { + LoggerExceptionReporter.report(exception) + + for (reporterName in reporters) { + val reporter = registry[reporterName] + if (reporter != null) { + reporter.report(exception) + } else { + log.warn("Exception reporter $reporterName not registered") + } + } + } + +} + +interface ExceptionReporter { + + fun reporterName(): String + + fun report(exception: AgentException) + + fun register() { + ExceptionReporterHandler.register(this) + } + +} + +object LoggerExceptionReporter : ExceptionReporter { + + private val log = LoggerFactory.getLogger(this::class.java) + + override fun reporterName(): String = "logger-reporter" + + override fun report(exception: AgentException) { + val exceptionReport = exception.toReport().toDetailedString() + log.error("exception occurred: $exceptionReport") + } + +} + +inline fun checkAgentStartup( + condition: Boolean, + exception: () -> AgentStartupException +) { + if (!condition) throw exception() +} diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/capability/exception/CapabilityCheckFailedException.java b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/capability/exception/CapabilityCheckFailedException.java index 4800957e..66844253 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/capability/exception/CapabilityCheckFailedException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/capability/exception/CapabilityCheckFailedException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.framework.agent.factory.capability.exception; -import work.slhaf.partner.framework.agent.exception.AgentLaunchFailedException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentLaunchFailedException; public class CapabilityCheckFailedException extends AgentLaunchFailedException { public CapabilityCheckFailedException(String message) { diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/capability/exception/CapabilityFactoryExecuteFailedException.java b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/capability/exception/CapabilityFactoryExecuteFailedException.java index c179d6d1..c56461af 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/capability/exception/CapabilityFactoryExecuteFailedException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/capability/exception/CapabilityFactoryExecuteFailedException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.framework.agent.factory.capability.exception; -import work.slhaf.partner.framework.agent.exception.AgentLaunchFailedException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentLaunchFailedException; public class CapabilityFactoryExecuteFailedException extends AgentLaunchFailedException { public CapabilityFactoryExecuteFailedException(String message) { diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/component/exception/ProxiedModuleRunningException.java b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/component/exception/ProxiedModuleRunningException.java index b7e34d6f..1430b720 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/component/exception/ProxiedModuleRunningException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/component/exception/ProxiedModuleRunningException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.framework.agent.factory.component.exception; -import work.slhaf.partner.framework.agent.exception.AgentRuntimeException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentRuntimeException; public class ProxiedModuleRunningException extends AgentRuntimeException { public ProxiedModuleRunningException(String message) { diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/config/exception/ConfigFactoryInitFailedException.java b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/config/exception/ConfigFactoryInitFailedException.java index 1445dc6d..14589f83 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/config/exception/ConfigFactoryInitFailedException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/config/exception/ConfigFactoryInitFailedException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.framework.agent.factory.config.exception; -import work.slhaf.partner.framework.agent.exception.AgentLaunchFailedException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentLaunchFailedException; public class ConfigFactoryInitFailedException extends AgentLaunchFailedException { public ConfigFactoryInitFailedException(String message, Throwable cause) { diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/config/exception/ConfigFactoryRuntimeException.java b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/config/exception/ConfigFactoryRuntimeException.java index 711d9d0a..7904afe7 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/config/exception/ConfigFactoryRuntimeException.java +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/config/exception/ConfigFactoryRuntimeException.java @@ -1,6 +1,6 @@ package work.slhaf.partner.framework.agent.factory.config.exception; -import work.slhaf.partner.framework.agent.exception.AgentRuntimeException; +import work.slhaf.partner.framework.agent.exception.deprecated.AgentRuntimeException; public class ConfigFactoryRuntimeException extends AgentRuntimeException { public ConfigFactoryRuntimeException(String message, Throwable cause) { diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/context/AgentContext.kt b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/context/AgentContext.kt index be3510a0..25491296 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/context/AgentContext.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/context/AgentContext.kt @@ -3,7 +3,7 @@ package work.slhaf.partner.framework.agent.factory.context import com.alibaba.fastjson2.JSONArray import com.alibaba.fastjson2.JSONObject import org.slf4j.LoggerFactory -import work.slhaf.partner.framework.agent.exception.AgentRunningFailedException +import work.slhaf.partner.framework.agent.exception.deprecated.AgentRunningFailedException import work.slhaf.partner.framework.agent.factory.capability.annotation.CapabilityCore import work.slhaf.partner.framework.agent.factory.component.abstracts.AbstractAgentModule import work.slhaf.partner.framework.agent.factory.component.annotation.AgentComponent