mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 05:40:44 +00:00
fix(clawsweeper): address review for automerge-openclaw-openclaw-75840 (1)
This commit is contained in:
@@ -404,7 +404,7 @@ describe("cron model formatting and precedence edge cases", () => {
|
||||
});
|
||||
|
||||
describe("CLI runtime compatibility", () => {
|
||||
it("uses a configured per-agent Claude CLI runtime for resolved Anthropic models", async () => {
|
||||
it("keeps the canonical Anthropic provider when a per-agent Claude CLI runtime is configured", async () => {
|
||||
await expectSelectedModel(
|
||||
{
|
||||
cfg: {
|
||||
@@ -422,7 +422,7 @@ describe("cron model formatting and precedence edge cases", () => {
|
||||
},
|
||||
agentId: "scheduler",
|
||||
},
|
||||
{ provider: "claude-cli", model: "claude-opus-4-6" },
|
||||
{ provider: "anthropic", model: "claude-opus-4-6" },
|
||||
);
|
||||
});
|
||||
|
||||
@@ -453,7 +453,7 @@ describe("cron model formatting and precedence edge cases", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("uses a configured default Claude CLI runtime for resolved Anthropic models", async () => {
|
||||
it("keeps the canonical Anthropic provider when a default Claude CLI runtime is configured", async () => {
|
||||
await expectSelectedModel(
|
||||
{
|
||||
cfg: {
|
||||
@@ -465,7 +465,7 @@ describe("cron model formatting and precedence edge cases", () => {
|
||||
},
|
||||
},
|
||||
},
|
||||
{ provider: "claude-cli", model: "claude-opus-4-6" },
|
||||
{ provider: "anthropic", model: "claude-opus-4-6" },
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { resolveCliRuntimeExecutionProvider } from "../../agents/model-runtime-aliases.js";
|
||||
import type { OpenClawConfig } from "../../config/types.openclaw.js";
|
||||
import type { CronJob } from "../types.js";
|
||||
import {
|
||||
@@ -149,12 +148,5 @@ export async function resolveCronModelSelection(
|
||||
}
|
||||
}
|
||||
|
||||
const executionProvider =
|
||||
resolveCliRuntimeExecutionProvider({
|
||||
provider,
|
||||
cfg: params.cfgWithAgentDefaults,
|
||||
agentId: params.agentId,
|
||||
}) ?? provider;
|
||||
|
||||
return { ok: true, provider: executionProvider, model };
|
||||
return { ok: true, provider, model };
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { resolveCliRuntimeExecutionProvider } from "../../agents/model-runtime-aliases.js";
|
||||
import type { SkillSnapshot } from "../../agents/skills.js";
|
||||
import { normalizeToolList } from "../../agents/tool-policy.js";
|
||||
import type { ThinkLevel, VerboseLevel } from "../../auto-reply/thinking.js";
|
||||
@@ -135,12 +136,18 @@ export function createCronPromptExecutor(params: {
|
||||
if (params.abortSignal?.aborted) {
|
||||
throw new Error(params.abortReason());
|
||||
}
|
||||
const executionProvider =
|
||||
resolveCliRuntimeExecutionProvider({
|
||||
provider: providerOverride,
|
||||
cfg: params.cfgWithAgentDefaults,
|
||||
agentId: params.agentId,
|
||||
}) ?? providerOverride;
|
||||
const bootstrapPromptWarningSignature =
|
||||
bootstrapPromptWarningSignaturesSeen[bootstrapPromptWarningSignaturesSeen.length - 1];
|
||||
if (isCliProvider(providerOverride, params.cfgWithAgentDefaults)) {
|
||||
if (isCliProvider(executionProvider, params.cfgWithAgentDefaults)) {
|
||||
const cliSessionId = params.cronSession.isNewSession
|
||||
? undefined
|
||||
: await getCliSessionId(params.cronSession.sessionEntry, providerOverride);
|
||||
: await getCliSessionId(params.cronSession.sessionEntry, executionProvider);
|
||||
const result = await runCliAgent({
|
||||
sessionId: params.cronSession.sessionEntry.sessionId,
|
||||
sessionKey: params.runSessionKey,
|
||||
@@ -151,7 +158,7 @@ export function createCronPromptExecutor(params: {
|
||||
workspaceDir: params.workspaceDir,
|
||||
config: params.cfgWithAgentDefaults,
|
||||
prompt: promptText,
|
||||
provider: providerOverride,
|
||||
provider: executionProvider,
|
||||
model: modelOverride,
|
||||
thinkLevel: params.thinkLevel,
|
||||
timeoutMs: params.timeoutMs,
|
||||
|
||||
@@ -5,8 +5,11 @@ import {
|
||||
setupRunCronIsolatedAgentTurnSuite,
|
||||
} from "./run.suite-helpers.js";
|
||||
import {
|
||||
isCliProviderMock,
|
||||
loadRunCronIsolatedAgentTurn,
|
||||
resolveConfiguredModelRefMock,
|
||||
resolveAgentModelFallbacksOverrideMock,
|
||||
runCliAgentMock,
|
||||
runWithModelFallbackMock,
|
||||
} from "./run.test-harness.js";
|
||||
|
||||
@@ -54,4 +57,53 @@ describe("runCronIsolatedAgentTurn — payload.fallbacks", () => {
|
||||
expect(runWithModelFallbackMock).toHaveBeenCalledOnce();
|
||||
expect(runWithModelFallbackMock.mock.calls[0][0].fallbacksOverride).toEqual(expectedFallbacks);
|
||||
});
|
||||
|
||||
it("plans Anthropic fallbacks canonically while executing compatible attempts through Claude CLI", async () => {
|
||||
isCliProviderMock.mockImplementation((provider: string) => provider === "claude-cli");
|
||||
resolveConfiguredModelRefMock.mockReturnValue({
|
||||
provider: "anthropic",
|
||||
model: "claude-opus-4-6",
|
||||
});
|
||||
runCliAgentMock.mockResolvedValue({
|
||||
payloads: [{ text: "fallback ok" }],
|
||||
meta: { agentMeta: { usage: { input: 10, output: 20 } } },
|
||||
});
|
||||
runWithModelFallbackMock.mockImplementation(async ({ provider, model, run }) => {
|
||||
const firstResult = await run(provider, model);
|
||||
const secondResult = await run("anthropic", "claude-sonnet-4-6");
|
||||
return {
|
||||
result: secondResult ?? firstResult,
|
||||
provider: "anthropic",
|
||||
model: "claude-sonnet-4-6",
|
||||
attempts: [],
|
||||
};
|
||||
});
|
||||
|
||||
const result = await runCronIsolatedAgentTurn(
|
||||
makeIsolatedAgentTurnParams({
|
||||
cfg: {
|
||||
agents: {
|
||||
defaults: {
|
||||
agentRuntime: { id: "claude-cli" },
|
||||
model: {
|
||||
primary: "anthropic/claude-opus-4-6",
|
||||
fallbacks: ["anthropic/claude-sonnet-4-6"],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
expect(result.status).toBe("ok");
|
||||
expect(runWithModelFallbackMock).toHaveBeenCalledOnce();
|
||||
expect(runWithModelFallbackMock.mock.calls[0][0]).toMatchObject({
|
||||
provider: "anthropic",
|
||||
model: "claude-opus-4-6",
|
||||
});
|
||||
expect(runCliAgentMock.mock.calls.map((call) => [call[0].provider, call[0].model])).toEqual([
|
||||
["claude-cli", "claude-opus-4-6"],
|
||||
["claude-cli", "claude-sonnet-4-6"],
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user