From 2927cb2b6f8f269c650af0983df2d1d750aa0100 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Tue, 21 Apr 2026 15:07:35 +0800 Subject: [PATCH] fix(config): fix config reloading errors that caused by using wrong relative paths to load config file --- .../partner/core/cognition/ContextWorkspace.kt | 17 ++++++++++++----- .../framework/agent/config/ConfigCenter.kt | 7 +++++-- .../framework/agent/log/LogAdviceProvider.kt | 7 +++++++ .../agent/runtime/config/ConfigCenterTest.java | 6 +++++- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/ContextWorkspace.kt b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/ContextWorkspace.kt index 06a55091..b124f913 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/ContextWorkspace.kt +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/ContextWorkspace.kt @@ -132,7 +132,7 @@ class ContextWorkspace { } } if (removedBlocks.isNotEmpty()) { - recordExpire(sourceKey, removedBlocks) + recordExpire(sourceKey) } } @@ -144,12 +144,19 @@ class ContextWorkspace { TraceRecorder.record(TraceEvent(tracePath, payload)) } - private fun recordExpire(sourceKey: ContextBlock.SourceKey, removedBlocks: List) { + private fun recordExpire(sourceKey: ContextBlock.SourceKey) { val payload = JSONObject() payload["action"] = "expire" - payload["blockName"] = sourceKey.blockName - payload["source"] = sourceKey.source - payload["removed"] = removedBlocks.map(::blockSnapshot) + payload["changedSourceKey"] = JSONObject.of( + "blockName", sourceKey.blockName, + "source", sourceKey.source + ) + payload["blocks"] = stateSet + .sortedWith( + compareBy { it.sourceKey.blockName } + .thenBy { it.sourceKey.source } + ) + .map(::blockSnapshot) TraceRecorder.record(TraceEvent(tracePath, payload)) } 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 99003453..0e438b45 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 @@ -89,7 +89,8 @@ object ConfigCenter : AutoCloseable { fun initAll() { val errorConfig = mutableMapOf() registrations.forEach { (path, registration) -> - val pair = loadConfig(path, registration) + val configFile = paths.configDir.resolve(path).normalize() + val pair = loadConfig(configFile, registration) if (pair != null) { (registration as ConfigRegistration).init(pair.first, pair.second) return@forEach @@ -175,6 +176,7 @@ object ConfigCenter : AutoCloseable { return field.isSynthetic || Modifier.isStatic(field.modifiers) } + @Suppress("unused") private fun handleUpsert(thisDir: Path, context: Path?) { if (context == null || !Files.isRegularFile(context) || !isJsonFile(context)) { return @@ -182,6 +184,7 @@ object ConfigCenter : AutoCloseable { reloadIfRegistered(context) } + @Suppress("unused") private fun handleDelete(thisDir: Path, context: Path?) { if (context == null || !isJsonFile(context)) { return @@ -260,7 +263,7 @@ object ConfigCenter : AutoCloseable { checkAgentStartup(!path.isAbsolute) { AgentStartupException("Config path must be relative: $path", COMPONENT_NAME) } - return paths.configDir.resolve(path).normalize() + return path.normalize() } } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/log/LogAdviceProvider.kt b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/log/LogAdviceProvider.kt index e396c0d4..51a1c4c3 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/log/LogAdviceProvider.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/framework/agent/log/LogAdviceProvider.kt @@ -70,6 +70,13 @@ object LogAdviceProvider : Configurable, ConfigRegistration logLevel = config.logLevel } + override fun onReload( + config: AdviceLoggingConfig, + json: JSONObject? + ) { + this.logLevel = config.logLevel + } + override fun defaultConfig(): AdviceLoggingConfig = AdviceLoggingConfig(AdviceLoggingConfig.LogLevel.NONE) } diff --git a/Partner-Framework/src/test/java/work/slhaf/partner/framework/agent/runtime/config/ConfigCenterTest.java b/Partner-Framework/src/test/java/work/slhaf/partner/framework/agent/runtime/config/ConfigCenterTest.java index 19387652..53d205ee 100644 --- a/Partner-Framework/src/test/java/work/slhaf/partner/framework/agent/runtime/config/ConfigCenterTest.java +++ b/Partner-Framework/src/test/java/work/slhaf/partner/framework/agent/runtime/config/ConfigCenterTest.java @@ -65,6 +65,10 @@ class ConfigCenterTest { writeJson(workingDir.resolve(INVALID_PATH), "invalid-init", 1); writeJson(workingDir.resolve(IDEMPOTENT_PATH), "idempotent-init", 1); writeJson(configDir.resolve(INITIAL_PATH), "initial-config-dir", 1); + writeJson(configDir.resolve(NESTED_PATH), "nested-config-dir", 1); + writeJson(configDir.resolve(DELETE_PATH), "delete-config-dir", 1); + writeJson(configDir.resolve(INVALID_PATH), "invalid-config-dir", 1); + writeJson(configDir.resolve(IDEMPOTENT_PATH), "idempotent-config-dir", 1); ConfigCenter.INSTANCE.register(() -> { Map> declared = new LinkedHashMap<>(); @@ -159,7 +163,7 @@ class ConfigCenterTest { @Test @Order(1) void testStartOnlyInitializesOneRegisteredConfigAndDoesNotTriggerReload() { - Assertions.assertEquals(1, totalInitCount()); + Assertions.assertEquals(5, totalInitCount()); Assertions.assertEquals(0, totalReloadCount()); }