





















@@ -2,25 +2,36 @@ import { describe, expect, it } from "vitest";
22import type { OpenClawConfig } from "../config/config.js";
33import { resolveSubagentThinkingOverride } from "./subagent-spawn-thinking.js";
445-type ThinkingLevel = "high" | "medium" | "low";
5+type ThinkingLevel = "high" | "medium" | "low" | "off";
6677function expectResolvedThinkingPlan(input: {
88expected: ThinkingLevel;
9+expectedOverride?: ThinkingLevel | null;
910thinkingOverrideRaw?: string;
11+callerThinkingRaw?: string;
12+requesterAgentConfig?: unknown;
13+targetAgentConfig?: unknown;
14+cfg?: OpenClawConfig;
1015}) {
11-const cfg = {
12-session: { mainKey: "main", scope: "per-sender" },
13-agents: { defaults: { subagents: { thinking: "high" } } },
14-} as OpenClawConfig;
16+const cfg =
17+input.cfg ??
18+({
19+session: { mainKey: "main", scope: "per-sender" },
20+agents: { defaults: { subagents: { thinking: "high" } } },
21+} as OpenClawConfig);
15221623const plan = resolveSubagentThinkingOverride({
1724 cfg,
25+requesterAgentConfig: input.requesterAgentConfig,
26+targetAgentConfig: input.targetAgentConfig,
1827thinkingOverrideRaw: input.thinkingOverrideRaw,
28+callerThinkingRaw: input.callerThinkingRaw,
1929});
20302131expect(plan).toEqual({
2232status: "ok",
23-thinkingOverride: input.expected,
33+thinkingOverride:
34+input.expectedOverride === null ? undefined : (input.expectedOverride ?? input.expected),
2435initialSessionPatch: { thinkingLevel: input.expected },
2536});
2637}
@@ -38,4 +49,66 @@ describe("sessions_spawn thinking defaults", () => {
3849expected: "low",
3950});
4051});
52+53+it("prefers per-agent subagent thinking over global subagent thinking", () => {
54+expectResolvedThinkingPlan({
55+targetAgentConfig: { subagents: { thinking: "medium" } },
56+expected: "medium",
57+});
58+});
59+60+it("prefers requester-agent subagent thinking over target-agent subagent thinking", () => {
61+expectResolvedThinkingPlan({
62+requesterAgentConfig: { subagents: { thinking: "low" } },
63+targetAgentConfig: { subagents: { thinking: "medium" } },
64+callerThinkingRaw: "high",
65+expected: "low",
66+});
67+});
68+69+it("inherits caller thinking when no explicit or configured subagent thinking exists", () => {
70+expectResolvedThinkingPlan({
71+cfg: {
72+session: { mainKey: "main", scope: "per-sender" },
73+agents: { defaults: {} },
74+} as OpenClawConfig,
75+callerThinkingRaw: "medium",
76+expected: "medium",
77+expectedOverride: null,
78+});
79+});
80+81+it("prefers global subagent thinking over caller thinking", () => {
82+expectResolvedThinkingPlan({
83+callerThinkingRaw: "medium",
84+expected: "high",
85+});
86+});
87+88+it("preserves caller thinking off when inherited", () => {
89+expectResolvedThinkingPlan({
90+cfg: {
91+session: { mainKey: "main", scope: "per-sender" },
92+agents: { defaults: {} },
93+} as OpenClawConfig,
94+callerThinkingRaw: "off",
95+expected: "off",
96+expectedOverride: null,
97+});
98+});
99+100+it("preserves explicit thinking off", () => {
101+expectResolvedThinkingPlan({
102+thinkingOverrideRaw: "off",
103+expected: "off",
104+});
105+});
106+107+it("preserves configured subagent thinking off", () => {
108+expectResolvedThinkingPlan({
109+targetAgentConfig: { subagents: { thinking: "off" } },
110+callerThinkingRaw: "high",
111+expected: "off",
112+});
113+});
41114});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。