diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts index 0c877f8f..89bfce7a 100644 --- a/packages/cli/src/config/settings.ts +++ b/packages/cli/src/config/settings.ts @@ -9,9 +9,9 @@ import * as path from 'path'; import { homedir } from 'os'; import { Config } from '@gemini-code/server'; -const SETTINGS_DIRECTORY_NAME = '.gemini'; -const USER_SETTINGS_DIR = path.join(homedir(), SETTINGS_DIRECTORY_NAME); -const USER_SETTINGS_PATH = path.join(USER_SETTINGS_DIR, 'settings.json'); +export const SETTINGS_DIRECTORY_NAME = '.gemini'; +export const USER_SETTINGS_DIR = path.join(homedir(), SETTINGS_DIRECTORY_NAME); +export const USER_SETTINGS_PATH = path.join(USER_SETTINGS_DIR, 'settings.json'); export enum SettingScope { User = 'User', diff --git a/packages/cli/src/utils/sandbox.ts b/packages/cli/src/utils/sandbox.ts index 08ebf6ec..ceaf8726 100644 --- a/packages/cli/src/utils/sandbox.ts +++ b/packages/cli/src/utils/sandbox.ts @@ -9,6 +9,10 @@ import os from 'node:os'; import path from 'node:path'; import fs from 'node:fs'; import { quote } from 'shell-quote'; +import { + USER_SETTINGS_DIR, + SETTINGS_DIRECTORY_NAME, +} from '../config/settings.js'; // node.js equivalent of scripts/sandbox_command.sh export function sandbox_command(): string { @@ -98,6 +102,21 @@ export async function start_sandbox(sandbox: string) { // mount current directory as ${workdir} inside container args.push('--volume', `${process.cwd()}:${workdir}`); + // mount user settings directory inside container, after creating if missing + // note user/home changes inside sandbox and we mount at BOTH paths for consistency + const userSettingsDirOnHost = USER_SETTINGS_DIR; + const userSettingsDirInSandbox = `/home/node/${SETTINGS_DIRECTORY_NAME}`; + if (!fs.existsSync(userSettingsDirOnHost)) { + fs.mkdirSync(userSettingsDirOnHost); + } + args.push('--volume', `${userSettingsDirOnHost}:${userSettingsDirOnHost}`); + if (userSettingsDirInSandbox !== userSettingsDirOnHost) { + args.push( + '--volume', + `${userSettingsDirOnHost}:${userSettingsDirInSandbox}`, + ); + } + // mount os.tmpdir() as /tmp inside container args.push('--volume', `${os.tmpdir()}:/tmp`);