From c0c56e31f05300e722d6031a558b7a780be0574f Mon Sep 17 00:00:00 2001 From: Amit Singh Date: Wed, 8 Apr 2026 01:04:08 +0530 Subject: [PATCH] fix(config): parse selected fields safely when names contain spaces --- shell-plugin/lib/actions/auth.zsh | 2 ++ shell-plugin/lib/actions/config.zsh | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/shell-plugin/lib/actions/auth.zsh b/shell-plugin/lib/actions/auth.zsh index 751d8ede41..e7fa1c8b62 100644 --- a/shell-plugin/lib/actions/auth.zsh +++ b/shell-plugin/lib/actions/auth.zsh @@ -11,6 +11,7 @@ function _forge_action_login() { selected=$(_forge_select_provider "" "" "" "$input_text") if [[ -n "$selected" ]]; then # Extract the second field (provider ID) + # Use multi-space delimiter to handle display names containing spaces local provider=$(echo "$selected" | awk -F ' +' '{print $2}') _forge_exec_interactive provider login "$provider" fi @@ -25,6 +26,7 @@ function _forge_action_logout() { selected=$(_forge_select_provider "\[yes\]" "" "" "$input_text") if [[ -n "$selected" ]]; then # Extract the second field (provider ID) + # Use multi-space delimiter to handle display names containing spaces local provider=$(echo "$selected" | awk -F ' +' '{print $2}') _forge_exec provider logout "$provider" fi diff --git a/shell-plugin/lib/actions/config.zsh b/shell-plugin/lib/actions/config.zsh index 9066626067..0ddd511005 100644 --- a/shell-plugin/lib/actions/config.zsh +++ b/shell-plugin/lib/actions/config.zsh @@ -144,7 +144,10 @@ function _forge_action_model() { # Field 1 = model_id (raw), field 3 = provider display name, # field 4 = provider_id (raw, for config set) local model_id provider_display provider_id - read -r model_id provider_display provider_id <<<$(echo "$selected" | awk -F ' +' '{print $1, $3, $4}') + # Extract fields separately to handle display names with spaces + model_id=$(echo "$selected" | awk -F ' +' '{print $1}') + provider_display=$(echo "$selected" | awk -F ' +' '{print $3}') + provider_id=$(echo "$selected" | awk -F ' +' '{print $4}') model_id=${model_id//[[:space:]]/} provider_id=${provider_id//[[:space:]]/} provider_display=${provider_display//[[:space:]]/} @@ -179,7 +182,9 @@ function _forge_action_commit_model() { if [[ -n "$selected" ]]; then # Field 1 = model_id (raw), field 4 = provider_id (raw) local model_id provider_id - read -r model_id provider_id <<<$(echo "$selected" | awk -F ' +' '{print $1, $4}') + # Extract fields separately to handle display names with spaces + model_id=$(echo "$selected" | awk -F ' +' '{print $1}') + provider_id=$(echo "$selected" | awk -F ' +' '{print $4}') model_id=${model_id//[[:space:]]/} provider_id=${provider_id//[[:space:]]/} @@ -208,7 +213,9 @@ function _forge_action_suggest_model() { if [[ -n "$selected" ]]; then # Field 1 = model_id (raw), field 4 = provider_id (raw) local model_id provider_id - read -r model_id provider_id <<<$(echo "$selected" | awk -F ' +' '{print $1, $4}') + # Extract fields separately to handle display names with spaces + model_id=$(echo "$selected" | awk -F ' +' '{print $1}') + provider_id=$(echo "$selected" | awk -F ' +' '{print $4}') model_id=${model_id//[[:space:]]/} provider_id=${provider_id//[[:space:]]/} @@ -328,7 +335,10 @@ function _forge_action_session_model() { if [[ -n "$selected" ]]; then local model_id provider_display provider_id - read -r model_id provider_display provider_id <<<$(echo "$selected" | awk -F ' +' '{print $1, $3, $4}') + # Extract fields separately to handle display names with spaces + model_id=$(echo "$selected" | awk -F ' +' '{print $1}') + provider_display=$(echo "$selected" | awk -F ' +' '{print $3}') + provider_id=$(echo "$selected" | awk -F ' +' '{print $4}') model_id=${model_id//[[:space:]]/} provider_id=${provider_id//[[:space:]]/}