




















@@ -6,6 +6,7 @@ import {
66normalizeClaudePermissionArgs,
77normalizeClaudeSettingSourcesArgs,
88resolveClaudePermissionMode,
9+resolveClaudeCliExecutionArgs,
910} from "./cli-shared.js";
10111112describe("normalizeClaudePermissionArgs", () => {
@@ -75,6 +76,67 @@ describe("normalizeClaudeSettingSourcesArgs", () => {
7576});
7677});
777879+describe("resolveClaudeCliExecutionArgs", () => {
80+it("omits effort args when thinking is off", () => {
81+expect(
82+resolveClaudeCliExecutionArgs({
83+workspaceDir: "/tmp",
84+provider: "claude-cli",
85+modelId: "claude-sonnet-4-6",
86+thinkingLevel: "off",
87+useResume: false,
88+baseArgs: ["-p", "--output-format", "stream-json"],
89+}),
90+).toEqual(["-p", "--output-format", "stream-json"]);
91+});
92+93+it("maps OpenClaw thinking levels to Claude effort args", () => {
94+expect(
95+resolveClaudeCliExecutionArgs({
96+workspaceDir: "/tmp",
97+provider: "claude-cli",
98+modelId: "claude-opus-4-7",
99+thinkingLevel: "minimal",
100+useResume: false,
101+baseArgs: ["-p"],
102+}),
103+).toEqual(["-p", "--effort", "low"]);
104+expect(
105+resolveClaudeCliExecutionArgs({
106+workspaceDir: "/tmp",
107+provider: "claude-cli",
108+modelId: "claude-opus-4-7",
109+thinkingLevel: "adaptive",
110+useResume: false,
111+baseArgs: ["-p"],
112+}),
113+).toEqual(["-p", "--effort", "medium"]);
114+expect(
115+resolveClaudeCliExecutionArgs({
116+workspaceDir: "/tmp",
117+provider: "claude-cli",
118+modelId: "claude-opus-4-7",
119+thinkingLevel: "xhigh",
120+useResume: true,
121+baseArgs: ["-p", "--resume", "{sessionId}"],
122+}),
123+).toEqual(["-p", "--resume", "{sessionId}", "--effort", "xhigh"]);
124+});
125+126+it("replaces static effort args when a session thinking level is active", () => {
127+expect(
128+resolveClaudeCliExecutionArgs({
129+workspaceDir: "/tmp",
130+provider: "claude-cli",
131+modelId: "claude-opus-4-7",
132+thinkingLevel: "max",
133+useResume: false,
134+baseArgs: ["-p", "--effort", "low", "--effort=high"],
135+}),
136+).toEqual(["-p", "--effort", "max"]);
137+});
138+});
139+78140describe("normalizeClaudeBackendConfig", () => {
79141it("normalizes both args and resumeArgs for custom overrides", () => {
80142const normalized = normalizeClaudeBackendConfig({
@@ -196,6 +258,7 @@ describe("normalizeClaudeBackendConfig", () => {
196258expect(normalized?.resumeArgs).toContain("--permission-mode");
197259expect(normalized?.resumeArgs).toContain("bypassPermissions");
198260expect(normalized?.liveSession).toBe("claude-stdio");
261+expect(backend.resolveExecutionArgs).toBe(resolveClaudeCliExecutionArgs);
199262});
200263201264it("leaves claude cli subscription-managed, restricts setting sources, and clears inherited env overrides", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。