mount user settings in sandbox (#239)

This commit is contained in:
Olcan 2025-05-01 12:08:24 -07:00 committed by GitHub
parent 7e8f379dfb
commit a386841947
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 3 deletions

View File

@ -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',

View File

@ -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`);