Skip to content

Commit 2b6640a

Browse files
authored
fix(claude): load Claude SDK filesystem setting sources (#1334)
1 parent 9e29c9d commit 2b6640a

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

apps/server/src/provider/Layers/ClaudeAdapter.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ describe("ClaudeAdapterLive", () => {
272272
});
273273

274274
const createInput = harness.getLastCreateQueryInput();
275+
assert.deepEqual(createInput?.options.settingSources, ["user", "project", "local"]);
275276
assert.equal(createInput?.options.permissionMode, "bypassPermissions");
276277
assert.equal(createInput?.options.allowDangerouslySkipPermissions, true);
277278
}).pipe(
@@ -280,6 +281,26 @@ describe("ClaudeAdapterLive", () => {
280281
);
281282
});
282283

284+
it.effect("loads Claude filesystem settings sources for SDK sessions", () => {
285+
const harness = makeHarness();
286+
return Effect.gen(function* () {
287+
const adapter = yield* ClaudeAdapter;
288+
yield* adapter.startSession({
289+
threadId: THREAD_ID,
290+
provider: "claudeAgent",
291+
runtimeMode: "approval-required",
292+
});
293+
294+
const createInput = harness.getLastCreateQueryInput();
295+
assert.deepEqual(createInput?.options.settingSources, ["user", "project", "local"]);
296+
assert.equal(createInput?.options.permissionMode, undefined);
297+
assert.equal(createInput?.options.allowDangerouslySkipPermissions, undefined);
298+
}).pipe(
299+
Effect.provideService(Random.Random, makeDeterministicRandomService()),
300+
Effect.provide(harness.layer),
301+
);
302+
});
303+
283304
it.effect("keeps explicit claude permission mode over runtime-derived defaults", () => {
284305
const harness = makeHarness();
285306
return Effect.gen(function* () {

apps/server/src/provider/Layers/ClaudeAdapter.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
type PermissionUpdate,
1616
type SDKMessage,
1717
type SDKResultMessage,
18+
type SettingSource,
1819
type SDKUserMessage,
1920
} from "@anthropic-ai/claude-agent-sdk";
2021
import {
@@ -426,6 +427,11 @@ const SUPPORTED_CLAUDE_IMAGE_MIME_TYPES = new Set([
426427
"image/png",
427428
"image/webp",
428429
]);
430+
const CLAUDE_SETTING_SOURCES = [
431+
"user",
432+
"project",
433+
"local",
434+
] as const satisfies ReadonlyArray<SettingSource>;
429435

430436
function buildPromptText(input: ProviderSendTurnInput): string {
431437
const requestedEffort = resolveReasoningEffortForProvider(
@@ -2562,6 +2568,7 @@ function makeClaudeAdapter(options?: ClaudeAdapterLiveOptions) {
25622568
...(input.cwd ? { cwd: input.cwd } : {}),
25632569
...(input.model ? { model: input.model } : {}),
25642570
pathToClaudeCodeExecutable: providerOptions?.binaryPath ?? "claude",
2571+
settingSources: [...CLAUDE_SETTING_SOURCES],
25652572
...(effectiveEffort ? { effort: effectiveEffort } : {}),
25662573
...(permissionMode ? { permissionMode } : {}),
25672574
...(permissionMode === "bypassPermissions"

0 commit comments

Comments
 (0)