mirror of https://github.com/openclaw/openclaw.git
64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { mockSessionsConfig, runSessionsJson, writeStore } from "./sessions.test-helpers.js";
|
|
|
|
mockSessionsConfig();
|
|
|
|
import { sessionsCommand } from "./sessions.js";
|
|
|
|
type SessionsJsonPayload = {
|
|
sessions?: Array<{
|
|
key: string;
|
|
model?: string | null;
|
|
}>;
|
|
};
|
|
|
|
async function resolveSubagentModel(
|
|
runtimeFields: Record<string, unknown>,
|
|
sessionId: string,
|
|
): Promise<string | null | undefined> {
|
|
const store = writeStore(
|
|
{
|
|
"agent:research:subagent:demo": {
|
|
sessionId,
|
|
updatedAt: Date.now() - 2 * 60_000,
|
|
...runtimeFields,
|
|
},
|
|
},
|
|
"sessions-model",
|
|
);
|
|
|
|
const payload = await runSessionsJson<SessionsJsonPayload>(sessionsCommand, store);
|
|
return payload.sessions?.find((row) => row.key === "agent:research:subagent:demo")?.model;
|
|
}
|
|
|
|
describe("sessionsCommand model resolution", () => {
|
|
beforeEach(() => {
|
|
vi.useFakeTimers();
|
|
vi.setSystemTime(new Date("2025-12-06T00:00:00Z"));
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
it("prefers runtime model fields for subagent sessions in JSON output", async () => {
|
|
const model = await resolveSubagentModel(
|
|
{
|
|
modelProvider: "openai-codex",
|
|
model: "gpt-5.3-codex",
|
|
modelOverride: "pi:opus",
|
|
},
|
|
"subagent-1",
|
|
);
|
|
expect(model).toBe("gpt-5.3-codex");
|
|
});
|
|
|
|
it("falls back to modelOverride when runtime model is missing", async () => {
|
|
const model = await resolveSubagentModel(
|
|
{ modelOverride: "openai-codex/gpt-5.3-codex" },
|
|
"subagent-2",
|
|
);
|
|
expect(model).toBe("gpt-5.3-codex");
|
|
});
|
|
});
|