summaryrefslogtreecommitdiff
path: root/packages/cli/src
diff options
context:
space:
mode:
authorOlcan <[email protected]>2025-05-01 12:08:24 -0700
committerGitHub <[email protected]>2025-05-01 12:08:24 -0700
commita386841947423dcf7d86f2e7f5d72849c95aa5a2 (patch)
treec91d0b20f72a8a851fc6c0bf030ad7a6b2cd4014 /packages/cli/src
parent7e8f379dfbd4d70050ce301a42a38ba9c1f052f4 (diff)
mount user settings in sandbox (#239)
Diffstat (limited to 'packages/cli/src')
-rw-r--r--packages/cli/src/config/settings.ts6
-rw-r--r--packages/cli/src/utils/sandbox.ts19
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`);