refactor(framework): register capability core instances per capability and store cores in AgentContext

This commit is contained in:
2026-02-26 22:27:43 +08:00
parent dde01a6253
commit a863b43563
2 changed files with 21 additions and 3 deletions

View File

@@ -34,7 +34,8 @@ class CapabilityRegisterFactory : AgentBaseFactory() {
val capabilityValue = capabilityType.getAnnotation(Capability::class.java).value val capabilityValue = capabilityType.getAnnotation(Capability::class.java).value
val proxy = createCapabilityProxy(capabilityType, capabilityValue, methodsRouterTable) val proxy = createCapabilityProxy(capabilityType, capabilityValue, methodsRouterTable)
val methods = buildCapabilityMethodMap(capabilityType, capabilityValue, methodBindingMap) val methods = buildCapabilityMethodMap(capabilityType, capabilityValue, methodBindingMap)
agentContext.addCapability(capabilityValue, proxy, methods) val cores = buildCapabilityCoreMap(capabilityValue, coreInstances)
agentContext.addCapability(capabilityValue, proxy, cores, methods)
} }
} }
@@ -124,6 +125,17 @@ class CapabilityRegisterFactory : AgentBaseFactory() {
return methods return methods
} }
private fun buildCapabilityCoreMap(
capabilityValue: String,
coreInstances: Map<Class<*>, Any>
): Map<Class<*>, Any> {
return coreInstances
.filterKeys { coreType ->
coreType.getAnnotation(CapabilityCore::class.java)?.value == capabilityValue
}
.toMap()
}
private fun invokeMethod(instance: Any, method: Method, args: Array<Any?>): Any? { private fun invokeMethod(instance: Any, method: Method, args: Array<Any?>): Any? {
return try { return try {
method.invoke(instance, *args) method.invoke(instance, *args)

View File

@@ -35,8 +35,13 @@ object AgentContext {
_modules[name] = module _modules[name] = module
} }
fun addCapability(capability: String, instance: Any, methods: Map<String, Method>) { fun addCapability(
val newImpl = CapabilityImplementation(instance.javaClass, instance, methods) capability: String,
instance: Any,
cores: Map<Class<*>, Any>,
methods: Map<String, Method>
) {
val newImpl = CapabilityImplementation(instance.javaClass, instance, cores, methods)
_capabilities[capability] = newImpl _capabilities[capability] = newImpl
} }
@@ -62,6 +67,7 @@ object AgentContext {
data class CapabilityImplementation( data class CapabilityImplementation(
val clazz: Class<*>, val clazz: Class<*>,
val instance: Any, val instance: Any,
val cores: Map<Class<*>, Any>,
val methods: Map<String, Method> val methods: Map<String, Method>
) )
} }