diff --git a/src/agents/cli-backends.test.ts b/src/agents/cli-backends.test.ts index 2618c0c0497..0a554b6f2f0 100644 --- a/src/agents/cli-backends.test.ts +++ b/src/agents/cli-backends.test.ts @@ -310,3 +310,43 @@ describe("resolveCliBackendConfig google-gemini-cli defaults", () => { expect(resolved?.config.modelAliases?.pro).toBe("gemini-3.1-pro-preview"); }); }); + +describe("resolveCliBackendConfig alias precedence", () => { + it("prefers the canonical backend key over legacy aliases when both are configured", () => { + const registry = createEmptyPluginRegistry(); + registry.cliBackends = [ + createBackendEntry({ + pluginId: "moonshot", + id: "kimi", + config: { + command: "kimi", + args: ["--default"], + }, + }), + ]; + setActivePluginRegistry(registry); + + const cfg = { + agents: { + defaults: { + cliBackends: { + "kimi-coding": { + command: "kimi-legacy", + args: ["--legacy"], + }, + kimi: { + command: "kimi-canonical", + args: ["--canonical"], + }, + }, + }, + }, + } satisfies OpenClawConfig; + + const resolved = resolveCliBackendConfig("kimi", cfg); + + expect(resolved).not.toBeNull(); + expect(resolved?.config.command).toBe("kimi-canonical"); + expect(resolved?.config.args).toEqual(["--canonical"]); + }); +}); diff --git a/src/agents/cli-backends.ts b/src/agents/cli-backends.ts index cce4829851a..22aa5168854 100644 --- a/src/agents/cli-backends.ts +++ b/src/agents/cli-backends.ts @@ -18,6 +18,10 @@ function pickBackendConfig( config: Record, normalizedId: string, ): CliBackendConfig | undefined { + const directKey = Object.keys(config).find((key) => key.trim().toLowerCase() === normalizedId); + if (directKey) { + return config[directKey]; + } for (const [key, entry] of Object.entries(config)) { if (normalizeBackendKey(key) === normalizedId) { return entry;