#compdef pmx
_pmx() {
local -a commands
# Get enabled commands dynamically, fallback to static list
local enabled_commands
enabled_commands=$(pmx internal-completion enabled-commands 2>/dev/null)
if [[ -n "$enabled_commands" ]]; then
# Build commands array from enabled commands
commands=()
while IFS= read -r cmd; do
case "$cmd" in
set-claude-profile)
commands+=('set-claude-profile:Set a Claude profile')
;;
reset-claude-profile)
commands+=('reset-claude-profile:Reset the current Claude profile')
;;
append-claude-profile)
commands+=('append-claude-profile:Append a Claude profile to existing configuration')
;;
set-codex-profile)
commands+=('set-codex-profile:Set a Codex profile')
;;
reset-codex-profile)
commands+=('reset-codex-profile:Reset the current Codex profile')
;;
append-codex-profile)
commands+=('append-codex-profile:Append a Codex profile to existing configuration')
;;
profile)
commands+=('profile:Profile management commands')
;;
completion)
commands+=('completion:Generate shell completions')
;;
mcp)
commands+=('mcp:Run MCP server to expose prompts')
;;
esac
done <<< "$enabled_commands"
commands+=('help:Print help message')
else
# Fallback to static command list
commands=(
'set-claude-profile:Set a Claude profile'
'reset-claude-profile:Reset the current Claude profile'
'append-claude-profile:Append a Claude profile to existing configuration'
'set-codex-profile:Set a Codex profile'
'reset-codex-profile:Reset the current Codex profile'
'append-codex-profile:Append a Codex profile to existing configuration'
'profile:Profile management commands'
'completion:Generate shell completions'
'mcp:Run MCP server to expose prompts'
'help:Print help message'
)
fi
if (( CURRENT == 2 )); then
_describe 'command' commands
elif (( CURRENT == 3 )); then
case "$words[2]" in
set-claude-profile|append-claude-profile)
local -a claude_profiles
claude_profiles=(${(f)"$(pmx internal-completion claude-profiles 2>/dev/null)"})
if [[ ${#claude_profiles[@]} -eq 0 ]]; then
# Fallback to general list
claude_profiles=(${(f)"$(pmx profile list 2>/dev/null)"})
fi
_describe 'profile' claude_profiles
;;
set-codex-profile|append-codex-profile)
local -a codex_profiles
codex_profiles=(${(f)"$(pmx internal-completion codex-profiles 2>/dev/null)"})
if [[ ${#codex_profiles[@]} -eq 0 ]]; then
# Fallback to general list
codex_profiles=(${(f)"$(pmx profile list 2>/dev/null)"})
fi
_describe 'profile' codex_profiles
;;
profile)
local -a profile_commands
profile_commands=(
'list:List all available profiles'
'edit:Edit an existing profile using $EDITOR'
'delete:Delete a profile (with confirmation)'
'create:Create a new profile using $EDITOR'
'show:Show profile content'
'copy:Copy profile contents to clipboard'
)
_describe 'subcommand' profile_commands
;;
completion)
_values 'shell' 'zsh'
;;
esac
elif (( CURRENT == 4 )); then
case "$words[2]" in
profile)
case "$words[3]" in
edit|delete|show|copy)
local -a profiles
profiles=(${(f)"$(pmx internal-completion profile-names 2>/dev/null)"})
if [[ ${#profiles[@]} -eq 0 ]]; then
# Fallback to general list
profiles=(${(f)"$(pmx profile list 2>/dev/null)"})
fi
_describe 'profile' profiles
;;
create)
# For create, we don't complete existing profiles since it's a new name
_message "profile name"
;;
esac
;;
esac
fi
}
compdef _pmx pmx