From 87559b34b87f40fea46eb99a61f4714a0e59e7ae Mon Sep 17 00:00:00 2001 From: dingyi Date: Tue, 19 May 2026 14:03:34 +0800 Subject: [PATCH] fix(agent): merge config defaults via deepAssign on agentcli sync Route syncAgentcliConfig through agent.reload() so the partial config written from agentcli passes through readConfig and gets merged with defaults. readConfig now uses deepAssign for trigger/computer/subAgent so partial saved sections (e.g. `computer: {}` or missing trigger) no longer override nested defaults and crash isProviderEnabled / buildStatus. --- packages/extension-agent/src/config/read.ts | 12 ++++-------- packages/extension-agent/src/utils/agentcli_sync.ts | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/extension-agent/src/config/read.ts b/packages/extension-agent/src/config/read.ts index ed6f8f878..6f122618a 100644 --- a/packages/extension-agent/src/config/read.ts +++ b/packages/extension-agent/src/config/read.ts @@ -2,6 +2,7 @@ import { Context } from 'koishi' import { readFile } from 'fs/promises' +import { deepAssign } from 'koishi-plugin-chatluna/utils/object' import { AgentConfig, createToolDefaultAvailability, @@ -68,14 +69,9 @@ export async function readConfig(ctx: Context): Promise { ) ) }, - trigger: { - ...base.trigger, - ...(cfg.trigger ?? {}), - providers: { - ...(base.trigger?.providers ?? {}), - ...(cfg.trigger?.providers ?? {}) - } - } + trigger: deepAssign({}, base.trigger, cfg.trigger ?? {}), + computer: deepAssign({}, base.computer, cfg.computer ?? {}), + subAgent: deepAssign({}, base.subAgent, cfg.subAgent ?? {}) } } catch { return getDefaultConfig() diff --git a/packages/extension-agent/src/utils/agentcli_sync.ts b/packages/extension-agent/src/utils/agentcli_sync.ts index d9536946f..592d4de60 100644 --- a/packages/extension-agent/src/utils/agentcli_sync.ts +++ b/packages/extension-agent/src/utils/agentcli_sync.ts @@ -81,7 +81,7 @@ export async function syncAgentcliConfig( const next = JSON.parse(chosen.content) as AgentConfig await writeConfig(agent.ctx, next) - await agent.reload(next) + await agent.reload() messages.push(`applied from ${sources.join(', ')}`) return {