From a7f7d58fafea08597e7ef26aa93ec073f2c96d82 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 00:33:37 +0000 Subject: [PATCH 1/2] test(server): Claude launch should send auto-compact window as CLAUDE_CODE_AUTO_COMPACT_WINDOW Reproduces #35725: a set T3 "Auto-compact after" value is sent only as autoCompactWindow, which Claude Code ignores when the env var is set. Co-Authored-By: Claude Opus 5.5 --- .../Adapters/ClaudeAdapterV2.test.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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" }, From 1fe034fc8a89d27ab8dd259d224076e3e02460e4 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 13 Nov 2026 00:36:46 +0000 Subject: [PATCH 2/2] fix(server): Claude's auto-compact setting now wins over CLAUDE_CODE_AUTO_COMPACT_WINDOW Claude Code ranks the CLAUDE_CODE_AUTO_COMPACT_WINDOW env var above the autoCompactWindow setting, so a user's env var silently overrode T3's "Auto-compact after" while T3's context meter still used the T3 value. Send the window as that env var in the launch settings too. Fixes pingdotgg/t3code#35725 Co-Authored-By: Claude Opus 5.5 --- .../orchestration-v2/Adapters/ClaudeAdapterV2.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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 }),