Skip to content

Commit ac74d82

Browse files
committed
feat: add -Q bare mode and credential backup system
- Add -Q/--quick flag for bare mode: no config mounts, no .deva, implies --rm - Backup credentials to tmpdir when auth override active, restore on exit - Include config hash in container name for explicit --config-home - Skip ~/.config/deva and ~/.cache/deva when -c is explicit (isolation) - Warn when explicit config-home has empty auth directories - Skip filesystem operations during --dry-run - Redact secrets in debug output
1 parent 682b21a commit ac74d82

2 files changed

Lines changed: 330 additions & 168 deletions

File tree

agents/gemini.sh

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,16 @@ setup_gemini_auth() {
3131
case "$method" in
3232
gemini-app-oauth|oauth)
3333
AUTH_DETAILS="gemini-app-oauth (~/.gemini)"
34-
if [ -d "$HOME/.gemini" ]; then
35-
DOCKER_ARGS+=("-v" "$HOME/.gemini:/home/deva/.gemini")
36-
else
37-
echo "Warning: ~/.gemini directory not found, creating it" >&2
38-
mkdir -p "$HOME/.gemini"
39-
DOCKER_ARGS+=("-v" "$HOME/.gemini:/home/deva/.gemini")
34+
# Only mount host ~/.gemini directly when no config-home mechanism is active.
35+
# -Q bare mode: no mounts at all. Explicit/auto config-home: centralized mount handles it.
36+
if [ "${QUICK_MODE:-false}" = false ] && [ "${CONFIG_HOME_FROM_CLI:-false}" = false ] && [ "${CONFIG_HOME_AUTO:-false}" = false ]; then
37+
if [ -d "$HOME/.gemini" ]; then
38+
DOCKER_ARGS+=("-v" "$HOME/.gemini:/home/deva/.gemini")
39+
else
40+
echo "Warning: ~/.gemini directory not found, creating it" >&2
41+
mkdir -p "$HOME/.gemini"
42+
DOCKER_ARGS+=("-v" "$HOME/.gemini:/home/deva/.gemini")
43+
fi
4044
fi
4145
;;
4246
api-key|gemini-api-key)
@@ -49,7 +53,9 @@ setup_gemini_auth() {
4953
DOCKER_ARGS+=("-e" "GEMINI_API_KEY=$GEMINI_API_KEY")
5054

5155
local gemini_config_dir
52-
if [ -n "${CONFIG_ROOT:-}" ]; then
56+
if [ -n "${CONFIG_HOME:-}" ] && [ "${CONFIG_HOME_FROM_CLI:-false}" = true ]; then
57+
gemini_config_dir="$CONFIG_HOME/.gemini"
58+
elif [ -n "${CONFIG_ROOT:-}" ]; then
5359
case "$CONFIG_ROOT" in
5460
/*) ;;
5561
*) auth_error "CONFIG_ROOT must be absolute path: $CONFIG_ROOT" ;;
@@ -72,12 +78,13 @@ setup_gemini_auth() {
7278
gemini_config_dir="$HOME/.gemini"
7379
fi
7480

75-
mkdir -p "$gemini_config_dir"
76-
rm -f "$gemini_config_dir/mcp-oauth-tokens-v2.json"
81+
if [ "${DRY_RUN:-false}" != true ]; then
82+
mkdir -p "$gemini_config_dir"
83+
rm -f "$gemini_config_dir/mcp-oauth-tokens-v2.json"
7784

78-
local settings_file="$gemini_config_dir/settings.json"
79-
if [ ! -f "$settings_file" ] || ! grep -q '"selectedType"' "$settings_file" 2>/dev/null; then
80-
cat > "$settings_file" <<'EOF'
85+
local settings_file="$gemini_config_dir/settings.json"
86+
if [ ! -f "$settings_file" ] || ! grep -q '"selectedType"' "$settings_file" 2>/dev/null; then
87+
cat > "$settings_file" <<'EOF'
8188
{
8289
"security": {
8390
"auth": {
@@ -86,9 +93,10 @@ setup_gemini_auth() {
8693
}
8794
}
8895
EOF
89-
echo "Created gemini settings with API key auth: $settings_file" >&2
90-
else
91-
echo "Using existing gemini settings: $settings_file" >&2
96+
echo "Created gemini settings with API key auth: $settings_file" >&2
97+
else
98+
echo "Using existing gemini settings: $settings_file" >&2
99+
fi
92100
fi
93101
;;
94102
vertex)

0 commit comments

Comments
 (0)