From 4a0f5476c0c4fbca586167c7b858b2db139c2d41 Mon Sep 17 00:00:00 2001 From: Olcan Date: Tue, 13 May 2025 15:36:34 -0700 Subject: [PATCH] fall back to ~/.env if .env is not found in current directory or any ancestors (#338) --- packages/server/src/config/config.ts | 6 ++++++ scripts/sandbox_command.sh | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/server/src/config/config.ts b/packages/server/src/config/config.ts index b5f7df3d..0cf8be2a 100644 --- a/packages/server/src/config/config.ts +++ b/packages/server/src/config/config.ts @@ -8,6 +8,7 @@ import * as dotenv from 'dotenv'; import * as fs from 'node:fs'; import * as path from 'node:path'; import process from 'node:process'; +import * as os from 'node:os'; import { ToolRegistry } from '../tools/tool-registry.js'; import { LSTool } from '../tools/ls.js'; import { ReadFileTool } from '../tools/read-file.js'; @@ -97,6 +98,11 @@ function findEnvFile(startDir: string): string | null { } const parentDir = path.dirname(currentDir); if (parentDir === currentDir || !parentDir) { + // check ~/.env as fallback + const homeEnvPath = path.join(os.homedir(), '.env'); + if (fs.existsSync(homeEnvPath)) { + return homeEnvPath; + } return null; } currentDir = parentDir; diff --git a/scripts/sandbox_command.sh b/scripts/sandbox_command.sh index 1eed9ad3..581c065b 100755 --- a/scripts/sandbox_command.sh +++ b/scripts/sandbox_command.sh @@ -33,7 +33,7 @@ shift $((OPTIND - 1)) # if GEMINI_CODE_SANDBOX is not set, see if it is set in user settings # note it can be string or boolean, and if missing jq will return null -USER_SETTINGS_FILE=~/.gemini/settings.json +USER_SETTINGS_FILE="$HOME/.gemini/settings.json" if [ -z "${GEMINI_CODE_SANDBOX:-}" ] && [ -f "$USER_SETTINGS_FILE" ]; then USER_SANDBOX_SETTING=$(jq -r '.sandbox' "$USER_SETTINGS_FILE") if [ "$USER_SANDBOX_SETTING" != null ]; then @@ -45,13 +45,20 @@ fi # allow .env to be in any ancestor directory (same as findEnvFile in config.ts) if [ -z "${GEMINI_CODE_SANDBOX:-}" ]; then current_dir=$(pwd) + dot_env_sourced=false while [ "$current_dir" != "/" ]; do if [ -f "$current_dir/.env" ]; then source "$current_dir/.env" + dot_env_sourced=true break fi current_dir=$(dirname "$current_dir") done + # if .env is not found in any ancestor directory, try ~/.env as fallback + if [ "$dot_env_sourced" = false ] && [ -f "$HOME/.env" ]; then + source "$HOME/.env" + dot_env_sourced=true + fi fi # lowercase GEMINI_CODE_SANDBOX