refactor(framework): rename CapabilityHolder to AgentComponent across factory and module hooks

This commit is contained in:
2026-02-21 16:19:00 +08:00
parent e510725e71
commit 3c9ace8e56
7 changed files with 24 additions and 10 deletions

View File

@@ -1,9 +1,9 @@
package work.slhaf.partner.api.agent.factory.capability.annotation; package work.slhaf.partner.api.agent.factory;
import java.lang.annotation.*; import java.lang.annotation.*;
@Inherited @Inherited
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
public @interface CapabilityHolder { public @interface AgentComponent {
} }

View File

@@ -3,6 +3,7 @@ package work.slhaf.partner.api.agent.factory.capability;
import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ClassUtil;
import org.reflections.Reflections; import org.reflections.Reflections;
import work.slhaf.partner.api.agent.factory.AgentBaseFactory; import work.slhaf.partner.api.agent.factory.AgentBaseFactory;
import work.slhaf.partner.api.agent.factory.AgentComponent;
import work.slhaf.partner.api.agent.factory.capability.annotation.*; import work.slhaf.partner.api.agent.factory.capability.annotation.*;
import work.slhaf.partner.api.agent.factory.capability.exception.*; import work.slhaf.partner.api.agent.factory.capability.exception.*;
import work.slhaf.partner.api.agent.factory.context.AgentRegisterContext; import work.slhaf.partner.api.agent.factory.context.AgentRegisterContext;
@@ -40,7 +41,7 @@ import static work.slhaf.partner.api.agent.util.AgentUtil.methodSignature;
* </li> * </li>
* <li> * <li>
* <p>{@link CapabilityCheckFactory#checkInjectCapability()}</p> * <p>{@link CapabilityCheckFactory#checkInjectCapability()}</p>
* 检查 {@link InjectCapability} 注解是否只用在 {@link CapabilityHolder} 所标识类的字段上。{@link AgentRunningModule} 与 {@link AgentSubModule} 已经被 {@link CapabilityHolder} 标注 * 检查 {@link InjectCapability} 注解是否只用在 {@link AgentComponent} 所标识类的字段上。{@link AgentRunningModule} 与 {@link AgentSubModule} 已经被 {@link AgentComponent} 标注
* </li> * </li>
* </ol> * </ol>
* *
@@ -92,13 +93,13 @@ public class CapabilityCheckFactory extends AgentBaseFactory {
} }
/** /**
* 检查<code>@InjectCapability</code>注解是否只用在<code>@CapabilityHolder</code>所标识类的字段上 * 检查<code>@InjectCapability</code>注解是否只用在<code>@AgentComponent</code>所标识类的字段上
*/ */
private void checkInjectCapability() { private void checkInjectCapability() {
reflections.getFieldsAnnotatedWith(InjectCapability.class).forEach(field -> { reflections.getFieldsAnnotatedWith(InjectCapability.class).forEach(field -> {
Class<?> declaringClass = field.getDeclaringClass(); Class<?> declaringClass = field.getDeclaringClass();
if (!isAssignableFromAnnotation(declaringClass, CapabilityHolder.class)) { if (!isAssignableFromAnnotation(declaringClass, AgentComponent.class)) {
throw new UnMatchedCapabilityException("InjectCapability 注解只能用于 CapabilityHolder 注解所在类,检查该类是否使用了@CapabilityHolder注解或者受其标注的注解或父类: " + declaringClass); throw new UnMatchedCapabilityException("InjectCapability 注解只能用于 AgentComponent 注解所在类,检查该类是否使用了@CapabilityHolder注解或者受其标注的注解或父类: " + declaringClass);
} }
}); });
} }

View File

@@ -3,6 +3,7 @@ package work.slhaf.partner.api.agent.factory.capability;
import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ClassUtil;
import org.reflections.Reflections; import org.reflections.Reflections;
import work.slhaf.partner.api.agent.factory.AgentBaseFactory; import work.slhaf.partner.api.agent.factory.AgentBaseFactory;
import work.slhaf.partner.api.agent.factory.AgentComponent;
import work.slhaf.partner.api.agent.factory.capability.annotation.*; import work.slhaf.partner.api.agent.factory.capability.annotation.*;
import work.slhaf.partner.api.agent.factory.capability.exception.CapabilityCoreInstancesCreateFailedException; import work.slhaf.partner.api.agent.factory.capability.exception.CapabilityCoreInstancesCreateFailedException;
import work.slhaf.partner.api.agent.factory.capability.exception.CapabilityFactoryExecuteFailedException; import work.slhaf.partner.api.agent.factory.capability.exception.CapabilityFactoryExecuteFailedException;
@@ -86,7 +87,7 @@ public class CapabilityRegisterFactory extends AgentBaseFactory {
} }
private void setCapabilityHolderInstances() { private void setCapabilityHolderInstances() {
Set<Class<?>> collect = reflections.getTypesAnnotatedWith(CapabilityHolder.class).stream() Set<Class<?>> collect = reflections.getTypesAnnotatedWith(AgentComponent.class).stream()
.filter(ClassUtil::isNormalClass) .filter(ClassUtil::isNormalClass)
.filter(clazz -> !capabilityHolderInstances.containsKey(clazz)) .filter(clazz -> !capabilityHolderInstances.containsKey(clazz))
.collect(Collectors.toSet()); .collect(Collectors.toSet());

View File

@@ -1,12 +1,14 @@
package work.slhaf.partner.api.agent.factory.capability.annotation; package work.slhaf.partner.api.agent.factory.capability.annotation;
import work.slhaf.partner.api.agent.factory.AgentComponent;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
/** /**
* 用于注入`Capability` * 用于注入`Capability`,适用于{@link AgentComponent} 实例
*/ */
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)

View File

@@ -2,7 +2,7 @@ package work.slhaf.partner.api.agent.factory.module.abstracts
import org.slf4j.Logger import org.slf4j.Logger
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityHolder import work.slhaf.partner.api.agent.factory.AgentComponent
import work.slhaf.partner.api.agent.factory.module.annotation.Init import work.slhaf.partner.api.agent.factory.module.annotation.Init
import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager
import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext
@@ -14,7 +14,7 @@ import work.slhaf.partner.api.chat.pojo.Message
/** /**
* 模块基类 * 模块基类
*/ */
@CapabilityHolder @AgentComponent
sealed class AbstractAgentModule { sealed class AbstractAgentModule {
var moduleName: String = javaClass.simpleName var moduleName: String = javaClass.simpleName

View File

@@ -1,10 +1,15 @@
package work.slhaf.partner.api.agent.factory.module.annotation; package work.slhaf.partner.api.agent.factory.module.annotation;
import work.slhaf.partner.api.agent.factory.AgentComponent;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
/**
* 初始化 Hook适用于{@link AgentComponent} 实例
*/
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
public @interface Init { public @interface Init {

View File

@@ -1,10 +1,15 @@
package work.slhaf.partner.api.agent.factory.module.annotation; package work.slhaf.partner.api.agent.factory.module.annotation;
import work.slhaf.partner.api.agent.factory.AgentComponent;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
/**
* 模块注入 Hook适用于{@link AgentComponent} 实例
*/
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface InjectModule { public @interface InjectModule {