From 909c29db253b5fb5613eea44d53897b61cf9f777 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Tue, 9 Jun 2026 20:08:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20mergeConfig=20=E4=BF=9D=E7=95=99=20meta?= =?UTF-8?q?data=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/config.ts | 4 ++++ tests/core/config.test.ts | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/core/config.ts b/src/core/config.ts index 77831fd..2da0444 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -94,6 +94,10 @@ function mergeConfig(userConfig: Partial): RuneConfig { } } + if (userConfig.metadata) { + result.metadata = userConfig.metadata; + } + return result; } diff --git a/tests/core/config.test.ts b/tests/core/config.test.ts index fc2b90b..6f040c9 100644 --- a/tests/core/config.test.ts +++ b/tests/core/config.test.ts @@ -170,3 +170,38 @@ describe("validateConfig", () => { expect(() => validateConfig(config)).not.toThrow(); }); }); + +describe("mergeConfig 保留 metadata", () => { + it("保留用户配置中的 metadata", async () => { + const tmpDir = join(import.meta.dir, "__tmp_config_meta_test__"); + await mkdir(tmpDir, { recursive: true }); + try { + const configPath = join(tmpDir, ".rune", "config.yaml"); + await mkdir(join(tmpDir, ".rune"), { recursive: true }); + await writeFile( + configPath, + `metadata:\n command: "bunx @lanyuanxiaoyao/rune"\nstages:\n discuss:\n prompt: "自定义讨论"\n`, + ); + const config = await loadConfig(tmpDir); + expect(config.metadata).toBeDefined(); + expect(config.metadata!.command).toBe("bunx @lanyuanxiaoyao/rune"); + expect(config.stages.discuss!.prompt).toBe("自定义讨论"); + } finally { + await rm(tmpDir, { recursive: true, force: true }); + } + }); + + it("无 metadata 时不设置该字段", async () => { + const tmpDir = join(import.meta.dir, "__tmp_config_nometa_test__"); + await mkdir(tmpDir, { recursive: true }); + try { + const configPath = join(tmpDir, ".rune", "config.yaml"); + await mkdir(join(tmpDir, ".rune"), { recursive: true }); + await writeFile(configPath, `stages:\n discuss:\n prompt: "测试"\n`); + const config = await loadConfig(tmpDir); + expect(config.metadata).toBeUndefined(); + } finally { + await rm(tmpDir, { recursive: true, force: true }); + } + }); +});