diff options
| author | Olcan <[email protected]> | 2025-05-01 12:08:24 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-05-01 12:08:24 -0700 |
| commit | a386841947423dcf7d86f2e7f5d72849c95aa5a2 (patch) | |
| tree | c91d0b20f72a8a851fc6c0bf030ad7a6b2cd4014 /packages/cli/src | |
| parent | 7e8f379dfbd4d70050ce301a42a38ba9c1f052f4 (diff) | |
mount user settings in sandbox (#239)
Diffstat (limited to 'packages/cli/src')
| -rw-r--r-- | packages/cli/src/config/settings.ts | 6 | ||||
| -rw-r--r-- | packages/cli/src/utils/sandbox.ts | 19 |
2 files changed, 22 insertions, 3 deletions
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`); |
