From e0a62053b50192a51f16e18e73edfc5dde5a479f Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Mon, 23 Feb 2026 22:12:56 +0800 Subject: [PATCH] refactor(framework): migrate `AgentRegisterContext` to Kotlin and store validated capability scan results in context --- .../CapabilityAnnotationValidatorFactory.kt | 42 ++++++++++++++----- .../factory/context/AgentRegisterContext.java | 27 ------------ .../factory/context/AgentRegisterContext.kt | 36 ++++++++++++++++ .../factory/context/ConfigFactoryContext.java | 14 ------- 4 files changed, 67 insertions(+), 52 deletions(-) delete mode 100644 Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentRegisterContext.java create mode 100644 Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentRegisterContext.kt delete mode 100644 Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/ConfigFactoryContext.java diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityAnnotationValidatorFactory.kt b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityAnnotationValidatorFactory.kt index f1e5e582..5908b099 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityAnnotationValidatorFactory.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/capability/CapabilityAnnotationValidatorFactory.kt @@ -20,11 +20,13 @@ class CapabilityAnnotationValidatorFactory : AgentBaseFactory() { val reflections = context.reflections val cores = loadCores(reflections) val capabilities = loadCapabilities(reflections) + val methods = loadCapabilityMethods(reflections) checkCapabilityUniqueByValue(capabilities) - checkCapabilityMethodLocation(reflections) + checkCapabilityMethodLocation(methods) checkCapabilityMethodsImplementedUniquely(cores, capabilities) checkInjectCapability(reflections) + storeValidatedScanResult(context, cores, capabilities, methods) } private fun loadCores(reflections: Reflections): Set> { @@ -37,6 +39,10 @@ class CapabilityAnnotationValidatorFactory : AgentBaseFactory() { return reflections.getTypesAnnotatedWith(Capability::class.java).toSet() } + private fun loadCapabilityMethods(reflections: Reflections): Set { + return reflections.getMethodsAnnotatedWith(CapabilityMethod::class.java).toSet() + } + /** * 规则1: @Capability 按 value 唯一 */ @@ -54,17 +60,16 @@ class CapabilityAnnotationValidatorFactory : AgentBaseFactory() { /** * 规则3.1: @CapabilityMethod 仅能用于 @CapabilityCore 类 */ - private fun checkCapabilityMethodLocation(reflections: Reflections) { - reflections.getMethodsAnnotatedWith(CapabilityMethod::class.java) - .forEach { method -> - val declaringClass = method.declaringClass - if (!declaringClass.isAnnotationPresent(CapabilityCore::class.java)) { - throw UnMatchedCapabilityException( - "@CapabilityMethod 仅能用于 @CapabilityCore 所标注类中: " + - "${declaringClass.name}#${method.name}" - ) - } + private fun checkCapabilityMethodLocation(methods: Set) { + methods.forEach { method -> + val declaringClass = method.declaringClass + if (!declaringClass.isAnnotationPresent(CapabilityCore::class.java)) { + throw UnMatchedCapabilityException( + "@CapabilityMethod 仅能用于 @CapabilityCore 所标注类中: " + + "${declaringClass.name}#${method.name}" + ) } + } } /** @@ -121,4 +126,19 @@ class CapabilityAnnotationValidatorFactory : AgentBaseFactory() { } } } + + private fun storeValidatedScanResult( + context: AgentRegisterContext, + cores: Set>, + capabilities: Set>, + methods: Set + ) { + val capabilityFactoryContext = context.capabilityFactoryContext + capabilityFactoryContext.cores.clear() + capabilityFactoryContext.capabilities.clear() + capabilityFactoryContext.methods.clear() + capabilityFactoryContext.cores.addAll(cores) + capabilityFactoryContext.capabilities.addAll(capabilities) + capabilityFactoryContext.methods.addAll(methods) + } } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentRegisterContext.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentRegisterContext.java deleted file mode 100644 index dc9af737..00000000 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentRegisterContext.java +++ /dev/null @@ -1,27 +0,0 @@ -package work.slhaf.partner.api.agent.factory.context; - -import lombok.Data; -import org.reflections.Reflections; -import org.reflections.scanners.Scanners; -import org.reflections.util.ConfigurationBuilder; - -import java.net.URL; -import java.util.List; - -@Data -public class AgentRegisterContext { - private Reflections reflections; - private ConfigFactoryContext configFactoryContext = new ConfigFactoryContext(); - private AgentContext agentContext = AgentContext.INSTANCE; - - public AgentRegisterContext(List urls) { - reflections = new Reflections(new ConfigurationBuilder().setScanners( - Scanners.FieldsAnnotated, - Scanners.SubTypes, - Scanners.MethodsAnnotated, - Scanners.TypesAnnotated - ) - .setUrls(urls) - ); - } -} diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentRegisterContext.kt b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentRegisterContext.kt new file mode 100644 index 00000000..0b021ab0 --- /dev/null +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/AgentRegisterContext.kt @@ -0,0 +1,36 @@ +package work.slhaf.partner.api.agent.factory.context + +import org.reflections.Reflections +import org.reflections.scanners.Scanners +import org.reflections.util.ConfigurationBuilder +import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig +import work.slhaf.partner.api.chat.pojo.Message +import java.lang.reflect.Method +import java.net.URL + +class AgentRegisterContext(urls: List) { + val reflections: Reflections = Reflections( + ConfigurationBuilder().setScanners( + Scanners.FieldsAnnotated, + Scanners.SubTypes, + Scanners.MethodsAnnotated, + Scanners.TypesAnnotated + ).setUrls(urls) + ) + + val configFactoryContext: ConfigFactoryContext = ConfigFactoryContext() + val capabilityFactoryContext: CapabilityFactoryContext = CapabilityFactoryContext() + val agentContext: AgentContext = AgentContext +} + +class ConfigFactoryContext { + val modelPromptMap: HashMap> = HashMap() + val modelConfigMap: HashMap = HashMap() +} + +class CapabilityFactoryContext { + val cores: MutableSet> = LinkedHashSet() + val capabilities: MutableSet> = LinkedHashSet() + val methods: MutableSet = LinkedHashSet() +} + diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/ConfigFactoryContext.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/ConfigFactoryContext.java deleted file mode 100644 index 1edd322c..00000000 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/factory/context/ConfigFactoryContext.java +++ /dev/null @@ -1,14 +0,0 @@ -package work.slhaf.partner.api.agent.factory.context; - -import lombok.Data; -import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig; -import work.slhaf.partner.api.chat.pojo.Message; - -import java.util.HashMap; -import java.util.List; - -@Data -public class ConfigFactoryContext { - private HashMap> modelPromptMap = new HashMap<>(); - private HashMap modelConfigMap = new HashMap<>(); -}