

























@@ -839,16 +839,6 @@ describe("resolveAgentConfig", () => {
839839fallbacks: ["google/gemini-3-pro"],
840840},
841841},
842-{
843-id: "metadata-only-subagent",
844-model: {
845-primary: "anthropic/claude-sonnet-4-6",
846-fallbacks: ["google/gemini-3-pro"],
847-},
848-subagents: {
849-model: { timeoutMs: 1_000 },
850-},
851-},
852842{
853843id: "fallback-only-agent-model",
854844model: {
@@ -883,9 +873,6 @@ describe("resolveAgentConfig", () => {
883873expect(resolveSubagentModelFallbacksOverride(cfg, "agent-model")).toEqual([
884874"google/gemini-3-pro",
885875]);
886-expect(resolveSubagentModelFallbacksOverride(cfg, "metadata-only-subagent")).toEqual([
887-"google/gemini-3-pro",
888-]);
889876expect(resolveSubagentModelFallbacksOverride(cfg, "fallback-only-agent-model")).toEqual([
890877"openai-codex/gpt-5.4",
891878"zai/glm-5",
@@ -900,6 +887,71 @@ describe("resolveAgentConfig", () => {
900887expect(resolveSubagentModelFallbacksOverride(cfg, "strict")).toStrictEqual([]);
901888});
902889890+it("uses subagent model fallbacks for auto-selected spawned subagent models", () => {
891+const cfg: OpenClawConfig = {
892+agents: {
893+defaults: {
894+model: {
895+fallbacks: ["openai/gpt-5.4"],
896+},
897+subagents: {
898+model: {
899+primary: "kimi/kimi-code",
900+fallbacks: ["openai-codex/gpt-5.4", "zai/glm-5"],
901+},
902+},
903+},
904+list: [
905+{
906+id: "research",
907+model: {
908+primary: "anthropic/claude-sonnet-4-6",
909+fallbacks: ["google/gemini-3-pro"],
910+},
911+},
912+{
913+id: "fallback-only-subagent",
914+model: {
915+primary: "anthropic/claude-sonnet-4-6",
916+fallbacks: ["google/gemini-3-pro"],
917+},
918+subagents: {
919+model: { fallbacks: ["zai/glm-5"] },
920+},
921+},
922+],
923+},
924+};
925+926+expect(
927+resolveEffectiveModelFallbacks({
928+ cfg,
929+agentId: "research",
930+sessionKey: "agent:research:subagent:child",
931+hasSessionModelOverride: true,
932+modelOverrideSource: "auto",
933+}),
934+).toEqual(["openai-codex/gpt-5.4", "zai/glm-5"]);
935+expect(
936+resolveEffectiveModelFallbacks({
937+ cfg,
938+agentId: "research",
939+sessionKey: "agent:research:subagent:child",
940+hasSessionModelOverride: true,
941+modelOverrideSource: "user",
942+}),
943+).toStrictEqual([]);
944+expect(
945+resolveEffectiveModelFallbacks({
946+ cfg,
947+agentId: "fallback-only-subagent",
948+sessionKey: "agent:fallback-only-subagent:subagent:child",
949+hasSessionModelOverride: true,
950+modelOverrideSource: "auto",
951+}),
952+).toEqual(["zai/glm-5"]);
953+});
954+903955it("resolves the subagent model config selected for isolated runs", () => {
904956const cfg: OpenClawConfig = {
905957agents: {
@@ -925,10 +977,10 @@ describe("resolveAgentConfig", () => {
925977},
926978},
927979{
928-id: "metadata-only-subagent",
980+id: "fallback-only-subagent",
929981model: "anthropic/claude-sonnet-4-6",
930982subagents: {
931-model: { timeoutMs: 1_000 },
983+model: { fallbacks: [] },
932984},
933985},
934986],
@@ -943,7 +995,7 @@ describe("resolveAgentConfig", () => {
943995primary: "kimi/kimi-code",
944996fallbacks: ["openai-codex/gpt-5.4"],
945997});
946-expect(resolveSubagentModelConfigSelection({ cfg, agentId: "metadata-only-subagent" })).toBe(
998+expect(resolveSubagentModelConfigSelection({ cfg, agentId: "fallback-only-subagent" })).toBe(
947999"anthropic/claude-sonnet-4-6",
9481000);
9491001expect(resolveSubagentModelConfigSelection({ cfg, agentId: "default-subagent" })).toBe(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。