| # Enable prompt substitution for RPROMPT | |
| setopt PROMPT_SUBST | |
| # Model and agent info with token count | |
| # Fully formatted output directly from Rust | |
| # Returns ZSH-formatted string ready for use in RPROMPT | |
| function _forge_prompt_info() { | |
| local forge_bin="${_FORGE_BIN:-${FORGE_BIN:-forge}}" | |
| # Get fully formatted prompt from forge (single command). | |
| # Pass session model/provider as CLI flags when set so the rprompt | |
| # reflects the active session override rather than global config. | |
| local -a forge_cmd | |
| forge_cmd=("$forge_bin") | |
| forge_cmd+=(zsh rprompt) | |
| [[ -n "$_FORGE_SESSION_MODEL" ]] && local -x FORGE_SESSION__MODEL_ID="$_FORGE_SESSION_MODEL" | |
| [[ -n "$_FORGE_SESSION_PROVIDER" ]] && local -x FORGE_SESSION__PROVIDER_ID="$_FORGE_SESSION_PROVIDER" | |
| [[ -n "$_FORGE_SESSION_REASONING_EFFORT" ]] && local -x FORGE_REASONING__EFFORT="$_FORGE_SESSION_REASONING_EFFORT" | |
| _FORGE_CONVERSATION_ID=$_FORGE_CONVERSATION_ID _FORGE_ACTIVE_AGENT=$_FORGE_ACTIVE_AGENT COLUMNS=$COLUMNS "${forge_cmd[@]}" 2>/dev/null | |
| } | |
| # Right prompt: agent and model with token count (uses single forge prompt command) | |
| # Set RPROMPT if empty, otherwise append to existing value | |
| if [[ -z "$_FORGE_THEME_LOADED" ]]; then | |
| RPROMPT='$(_forge_prompt_info)'"${RPROMPT:+ ${RPROMPT}}" | |
| fi | |