fix(install): expose published launcher to new login shells

This commit is contained in:
ethernet
2026-09-24 07:31:19 -04:00
parent c1a239407b
commit 3cfa43f0c5

View File

@@ -498,6 +498,41 @@ desktop_product_present() {
|| [ -d "$release/mac-arm64" ] || [ -d "$release/win-unpacked" ]
}
append_shell_path() {
local rc="$1" line="$2" pattern="$3"
# Existing user PATH setup wins; never append another line on a repair run.
if [ -f "$rc" ] && grep -E "$pattern" "$rc" >/dev/null 2>&1; then
return 0
fi
mkdir -p "$(dirname "$rc")"
printf '\n# Hermes Agent command\n%s\n' "$line" >> "$rc" || fail "cannot update PATH in $rc"
log "added ~/.local/bin to PATH in $rc"
}
wire_shell_path() {
# The launcher is published by source_completion; shell rc files belong to
# the installer, not to PM (updates must not modify a user's shell setup).
# Never use the installer's inherited PATH as a proxy for a *new* shell.
local login_shell="${SHELL:-/bin/bash}"
case "${login_shell##*/}" in
zsh)
append_shell_path "$HOME/.zshrc" 'export PATH="$HOME/.local/bin:$PATH"' '^[[:space:]]*[^#[:space:]].*PATH=.*\.local/bin'
append_shell_path "$HOME/.zprofile" 'export PATH="$HOME/.local/bin:$PATH"' '^[[:space:]]*[^#[:space:]].*PATH=.*\.local/bin'
;;
fish)
append_shell_path "$HOME/.config/fish/config.fish" 'fish_add_path "$HOME/.local/bin"' '^[[:space:]]*fish_add_path.*\.local/bin'
;;
*)
append_shell_path "$HOME/.bashrc" 'export PATH="$HOME/.local/bin:$PATH"' '^[[:space:]]*[^#[:space:]].*PATH=.*\.local/bin'
append_shell_path "$HOME/.profile" 'export PATH="$HOME/.local/bin:$PATH"' '^[[:space:]]*[^#[:space:]].*PATH=.*\.local/bin'
# Bash prefers .bash_profile over .profile if both exist.
if [ -f "$HOME/.bash_profile" ]; then
append_shell_path "$HOME/.bash_profile" 'export PATH="$HOME/.local/bin:$PATH"' '^[[:space:]]*[^#[:space:]].*PATH=.*\.local/bin'
fi
;;
esac
}
stage_products() {
# The whole tail in one place, by calling the completion an update calls:
# publish the commands, build the products (tui/web, plus the desktop app),
@@ -513,6 +548,7 @@ stage_products() {
fi
(cd "$INSTALL_DIR" && "$boot_py" -I -B -X utf8 hermes_cli/source_completion.py "${args[@]}") \
|| fail "app products or command publication failed"
wire_shell_path
log "app products and hermes command ready"
}