#!/bin/bash # Install shell completions for myagents, myclaude, mykimi to user directory only # Usage: install_completion.sh VENV_BIN_DIR="$1" COMP_DIR="$2" if [[ -z "$VENV_BIN_DIR" || -z "$COMP_DIR" ]]; then echo "Usage: $0 " >&2 exit 1 fi USER_SHELL=$(basename "$SHELL") # Portable uppercase helper (macOS bash 3.2 lacks ${var^^}). _upcase() { printf '%s' "$1" | tr '[:lower:]' '[:upper:]' } install_zsh_completion() { local cmd="$1" local out="$2" local var="_$(_upcase "$cmd")_COMPLETE" mkdir -p "$COMP_DIR" 2>/dev/null || { echo "Error: cannot create $COMP_DIR" >&2; return 1; } if eval "$var=zsh_source ${VENV_BIN_DIR}/${cmd}" > "$out" 2>/dev/null; then echo "Installed zsh completion: $out" return 0 else echo "Warning: failed to generate zsh completion for $cmd" >&2 return 1 fi } install_bash_completion() { local cmd="$1" local out="$2" local var="_$(_upcase "$cmd")_COMPLETE" mkdir -p "$COMP_DIR" 2>/dev/null || { echo "Error: cannot create $COMP_DIR" >&2; return 1; } if eval "$var=bash_source ${VENV_BIN_DIR}/${cmd}" > "$out" 2>/dev/null; then echo "Installed bash completion: $out" return 0 else echo "Warning: failed to generate bash completion for $cmd" >&2 return 1 fi } if [[ "$USER_SHELL" == "zsh" ]]; then install_zsh_completion myagents "$COMP_DIR/_myagents" install_zsh_completion myclaude "$COMP_DIR/_myclaude" install_zsh_completion mykimi "$COMP_DIR/_mykimi" elif [[ "$USER_SHELL" == "bash" ]]; then install_bash_completion myagents "$COMP_DIR/myagents.bash" install_bash_completion myclaude "$COMP_DIR/myclaude.bash" install_bash_completion mykimi "$COMP_DIR/mykimi.bash" else echo "Shell '$USER_SHELL' is not supported for automatic completion installation." echo "To install completions manually, run one of the following commands:" for cmd in myagents myclaude mykimi; do var="_$(_upcase "$cmd")_COMPLETE" echo " zsh: $var=zsh_source ${VENV_BIN_DIR}/${cmd} > /path/to/completions/_${cmd}" echo " bash: $var=bash_source ${VENV_BIN_DIR}/${cmd} > /path/to/completions/${cmd}.bash" done fi