From a3315b3fe1b653282f422a5e952ca2f009a85c8e Mon Sep 17 00:00:00 2001 From: Tamaro Skaljic <49238587+tamaro-skaljic@users.noreply.github.com> Date: Thu, 9 Apr 2026 15:52:28 +0200 Subject: [PATCH 1/2] (fix): Fix Claude Code Adapter for Supervised Chats Co-authored-by: codex --- .../src/provider/Layers/ClaudeAdapter.test.ts | 2 +- apps/server/src/provider/Layers/ClaudeAdapter.ts | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/server/src/provider/Layers/ClaudeAdapter.test.ts b/apps/server/src/provider/Layers/ClaudeAdapter.test.ts index 5c45013f8d..f9f57c8ef6 100644 --- a/apps/server/src/provider/Layers/ClaudeAdapter.test.ts +++ b/apps/server/src/provider/Layers/ClaudeAdapter.test.ts @@ -299,7 +299,7 @@ describe("ClaudeAdapterLive", () => { const createInput = harness.getLastCreateQueryInput(); assert.deepEqual(createInput?.options.settingSources, ["user", "project", "local"]); - assert.equal(createInput?.options.permissionMode, undefined); + assert.equal(createInput?.options.permissionMode, "default"); assert.equal(createInput?.options.allowDangerouslySkipPermissions, undefined); }).pipe( Effect.provideService(Random.Random, makeDeterministicRandomService()), diff --git a/apps/server/src/provider/Layers/ClaudeAdapter.ts b/apps/server/src/provider/Layers/ClaudeAdapter.ts index fb32da78c5..cd9c17d035 100644 --- a/apps/server/src/provider/Layers/ClaudeAdapter.ts +++ b/apps/server/src/provider/Layers/ClaudeAdapter.ts @@ -2693,11 +2693,12 @@ const makeClaudeAdapter = Effect.fn("makeClaudeAdapter")(function* ( ? modelSelection.options.thinking : undefined; const effectiveEffort = getEffectiveClaudeCodeEffort(effort); - const runtimeModeToPermission: Record = { - "auto-accept-edits": "acceptEdits", - "full-access": "bypassPermissions", - }; - const permissionMode = runtimeModeToPermission[input.runtimeMode]; + const permissionMode: PermissionMode = + input.runtimeMode === "full-access" + ? "bypassPermissions" + : input.runtimeMode === "auto-accept-edits" + ? "acceptEdits" + : "default"; const settings = { ...(typeof thinking === "boolean" ? { alwaysThinkingEnabled: thinking } : {}), ...(fastMode ? { fastMode: true } : {}), @@ -2709,7 +2710,7 @@ const makeClaudeAdapter = Effect.fn("makeClaudeAdapter")(function* ( pathToClaudeCodeExecutable: claudeBinaryPath, settingSources: [...CLAUDE_SETTING_SOURCES], ...(effectiveEffort ? { effort: effectiveEffort } : {}), - ...(permissionMode ? { permissionMode } : {}), + permissionMode, ...(permissionMode === "bypassPermissions" ? { allowDangerouslySkipPermissions: true } : {}), From 7e65313f0b2f3add844b81e5769b2a5e165f77c1 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 9 Apr 2026 11:23:10 -0700 Subject: [PATCH 2/2] Refactor Claude runtime mode mapping - Map runtime modes to permission modes with an explicit lookup - Include approval-required as the default permission path --- apps/server/src/provider/Layers/ClaudeAdapter.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/server/src/provider/Layers/ClaudeAdapter.ts b/apps/server/src/provider/Layers/ClaudeAdapter.ts index cd9c17d035..4a04a7654b 100644 --- a/apps/server/src/provider/Layers/ClaudeAdapter.ts +++ b/apps/server/src/provider/Layers/ClaudeAdapter.ts @@ -39,6 +39,7 @@ import { TurnId, type UserInputQuestion, ClaudeCodeEffort, + RuntimeMode, } from "@t3tools/contracts"; import { applyClaudePromptEffortPrefix, @@ -2693,12 +2694,12 @@ const makeClaudeAdapter = Effect.fn("makeClaudeAdapter")(function* ( ? modelSelection.options.thinking : undefined; const effectiveEffort = getEffectiveClaudeCodeEffort(effort); - const permissionMode: PermissionMode = - input.runtimeMode === "full-access" - ? "bypassPermissions" - : input.runtimeMode === "auto-accept-edits" - ? "acceptEdits" - : "default"; + const runtimeModeToPermission: Record = { + "approval-required": "default", + "auto-accept-edits": "acceptEdits", + "full-access": "bypassPermissions", + }; + const permissionMode = runtimeModeToPermission[input.runtimeMode]; const settings = { ...(typeof thinking === "boolean" ? { alwaysThinkingEnabled: thinking } : {}), ...(fastMode ? { fastMode: true } : {}),