test(subagents): dedupe sessions_spawn model expectation paths

This commit is contained in:
Peter Steinberger
2026-02-19 07:44:34 +00:00
parent d7b2efc2e7
commit ccd68d8166

View File

@@ -62,14 +62,18 @@ function mockPatchAndSingleAgentRun(params: { calls: GatewayCall[]; runId: strin
}
async function expectSpawnUsesConfiguredModel(params: {
config: SessionsSpawnConfigOverride;
config?: SessionsSpawnConfigOverride;
runId: string;
callId: string;
expectedModel: string;
}) {
resetSubagentRegistryForTests();
callGatewayMock.mockReset();
setSessionsSpawnConfigOverride(params.config);
if (params.config) {
setSessionsSpawnConfigOverride(params.config);
} else {
resetSessionsSpawnConfigOverride();
}
const calls: GatewayCall[] = [];
mockPatchAndSingleAgentRun({ calls, runId: params.runId });
@@ -198,60 +202,22 @@ describe("openclaw-tools: subagents (sessions_spawn model + thinking)", () => {
});
it("sessions_spawn applies default subagent model from defaults config", async () => {
resetSubagentRegistryForTests();
callGatewayMock.mockReset();
setSessionsSpawnConfigOverride({
session: { mainKey: "main", scope: "per-sender" },
agents: { defaults: { subagents: { model: "minimax/MiniMax-M2.1" } } },
});
const calls: GatewayCall[] = [];
mockPatchAndSingleAgentRun({ calls, runId: "run-default-model" });
const tool = await getSessionsSpawnTool({
agentSessionKey: "agent:main:main",
agentChannel: "discord",
});
const result = await tool.execute("call-default-model", {
task: "do thing",
});
expect(result.details).toMatchObject({
status: "accepted",
modelApplied: true,
});
const patchCall = calls.find(
(call) => call.method === "sessions.patch" && (call.params as { model?: string })?.model,
);
expect(patchCall?.params).toMatchObject({
model: "minimax/MiniMax-M2.1",
await expectSpawnUsesConfiguredModel({
config: {
session: { mainKey: "main", scope: "per-sender" },
agents: { defaults: { subagents: { model: "minimax/MiniMax-M2.1" } } },
},
runId: "run-default-model",
callId: "call-default-model",
expectedModel: "minimax/MiniMax-M2.1",
});
});
it("sessions_spawn falls back to runtime default model when no model config is set", async () => {
resetSubagentRegistryForTests();
callGatewayMock.mockReset();
const calls: GatewayCall[] = [];
mockPatchAndSingleAgentRun({ calls, runId: "run-runtime-default-model" });
const tool = await getSessionsSpawnTool({
agentSessionKey: "agent:main:main",
agentChannel: "discord",
});
const result = await tool.execute("call-runtime-default-model", {
task: "do thing",
});
expect(result.details).toMatchObject({
status: "accepted",
modelApplied: true,
});
const patchCall = calls.find(
(call) => call.method === "sessions.patch" && (call.params as { model?: string })?.model,
);
expect(patchCall?.params).toMatchObject({
model: `${DEFAULT_PROVIDER}/${DEFAULT_MODEL}`,
await expectSpawnUsesConfiguredModel({
runId: "run-runtime-default-model",
callId: "call-runtime-default-model",
expectedModel: `${DEFAULT_PROVIDER}/${DEFAULT_MODEL}`,
});
});