diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts index cfd6c526b2726..fc028ddcb31f3 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts @@ -395,6 +395,20 @@ describe("ClaudeAdapterV2 runtime query policy", () => { }); }); + it("sends the auto-compact window as the env var Claude Code prefers", () => { + const options = ClaudeAdapterV2.makeClaudeQueryOptions({ + modelSelection: CLAUDE_TEST_MODEL_SELECTION, + nativeThreadId: "native-auto-compact", + resume: false, + cwd: "/workspace", + settings: { ...DEFAULT_CLAUDE_SETTINGS, autoCompactWindow: "400000" }, + }); + assert.equal( + (options.settings as { env?: Record }).env?.CLAUDE_CODE_AUTO_COMPACT_WINDOW, + "400000", + ); + }); + it("sends a custom model named like a Claude Code alias to the API unchanged", () => { const options = ClaudeAdapterV2.makeClaudeQueryOptions({ modelSelection: { instanceId: CLAUDE_TEST_MODEL_SELECTION.instanceId, model: "opus" }, diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts index a58f91124f16d..835b0e634da0e 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts @@ -2009,12 +2009,16 @@ export function makeClaudeQueryOptions(input: { : typeof input.sdkSettings === "object" && input.sdkSettings !== null ? ({ ...input.sdkSettings, ...selectionSettings } as ClaudeSdkSettings) : selectionSettings; - const compactQuerySettings = + const autoCompactWindow = input.settings?.autoCompactWindow === undefined || input.settings.autoCompactWindow.length === 0 + ? undefined + : input.settings.autoCompactWindow; + const compactQuerySettings = + autoCompactWindow === undefined ? querySettings : ({ ...(typeof querySettings === "object" && querySettings !== null ? querySettings : {}), - autoCompactWindow: Number(input.settings.autoCompactWindow), + autoCompactWindow: Number(autoCompactWindow), } as ClaudeSdkSettings); // Claude Code expands a bare alias to its own model, so a custom model with an alias's name // pins the alias to itself. @@ -2026,7 +2030,9 @@ export function makeClaudeQueryOptions(input: { : undefined; // A settings file path cannot take extra keys, so it goes through unchanged. const effectiveQuerySettings = - (input.toolSearchOverride === undefined && aliasOverrideEnv === undefined) || + (input.toolSearchOverride === undefined && + aliasOverrideEnv === undefined && + autoCompactWindow === undefined) || typeof compactQuerySettings === "string" ? compactQuerySettings : ({ @@ -2034,6 +2040,10 @@ export function makeClaudeQueryOptions(input: { env: { ...compactQuerySettings?.env, ...aliasOverrideEnv, + // Claude Code ranks this env var above the autoCompactWindow setting. + ...(autoCompactWindow === undefined + ? {} + : { CLAUDE_CODE_AUTO_COMPACT_WINDOW: autoCompactWindow }), ...(input.toolSearchOverride === undefined ? {} : { ENABLE_TOOL_SEARCH: input.toolSearchOverride }),