From 3e5d6ebeb440a0df65bc0520dd9b13e96552c9d2 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Thu, 9 Apr 2026 16:13:04 +0800 Subject: [PATCH] feat(runtime): support mask assigned modules; and remove legacy module record in agent context --- .../component/ComponentRegisterFactory.kt | 3 +- .../agent/factory/context/AgentContext.kt | 3 +- .../agent/interaction/AgentRuntime.kt | 50 ++++++++++++++++++- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/component/ComponentRegisterFactory.kt b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/component/ComponentRegisterFactory.kt index 7cac67d8..959f86d0 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/component/ComponentRegisterFactory.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/factory/component/ComponentRegisterFactory.kt @@ -84,8 +84,7 @@ class ComponentRegisterFactory : AgentBaseFactory() { instance = module, launchTime = launchTime, modelInfo = modelInfo, - order = module.order(), - enabled = true + order = module.order() ) agentContext.addModule(module.moduleName, moduleContext as ModuleContextData) } 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 ed2f0ff8..be3510a0 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 @@ -218,8 +218,7 @@ sealed class ModuleContextData { override val launchTime: ZonedDateTime, override val modelInfo: ModelInfo?, - val order: Int, - val enabled: Boolean + val order: Int ) : ModuleContextData() data class Sub>( diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/interaction/AgentRuntime.kt b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/interaction/AgentRuntime.kt index b8a218bc..aaee6022 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/interaction/AgentRuntime.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/interaction/AgentRuntime.kt @@ -1,14 +1,20 @@ package work.slhaf.partner.framework.agent.interaction +import com.alibaba.fastjson2.JSONObject +import com.alibaba.fastjson2.annotation.JSONField import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel +import work.slhaf.partner.framework.agent.config.Config +import work.slhaf.partner.framework.agent.config.ConfigRegistration +import work.slhaf.partner.framework.agent.config.Configurable import work.slhaf.partner.framework.agent.factory.component.abstracts.AbstractAgentModule import work.slhaf.partner.framework.agent.factory.context.AgentContext import work.slhaf.partner.framework.agent.factory.context.ModuleContextData import work.slhaf.partner.framework.agent.interaction.data.InteractionEvent import work.slhaf.partner.framework.agent.interaction.flow.RunningFlowContext +import java.nio.file.Path -object AgentRuntime { +object AgentRuntime : Configurable, ConfigRegistration { private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default) @@ -23,7 +29,11 @@ object AgentRuntime { @Volatile private var runningModules: Map>> = emptyMap() + @Volatile + private var maskedModules: Set = emptySet() + init { + register() scope.launch { for (ctx in channel) { executeTurn(ctx) @@ -77,7 +87,7 @@ object AgentRuntime { private fun refreshRunningModules() { runningModules = AgentContext.modules.values .filterIsInstance>>() - .filter { it.enabled } + .filterNot { maskedModules.contains(it.instance.moduleName) } .groupBy { it.order } .mapValues { it.value.map { contextData -> contextData.instance } } .toSortedMap() @@ -100,4 +110,40 @@ object AgentRuntime { } } + override fun declare(): Map> { + return mapOf(Path.of("masked_modules.json") to this) + } + + override fun type(): Class { + return ModuleMaskConfig::class.java + } + + override fun init( + config: ModuleMaskConfig, + json: JSONObject? + ) { + applyModuleMask(config) + } + + override fun onReload( + config: ModuleMaskConfig, + json: JSONObject? + ) { + applyModuleMask(config) + } + + override fun defaultConfig(): ModuleMaskConfig { + return ModuleMaskConfig(setOf()) + } + + private fun applyModuleMask(config: ModuleMaskConfig) { + maskedModules = config.maskedModules + refreshRunningModules() + } + } + +data class ModuleMaskConfig( + @field:JSONField(name = "masked_modules") + val maskedModules: Set +) : Config()