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 }); + } + }); +});