
___X_CMD_CHAT_MINION_PATH="$___X_CMD_ROOT_MOD/chat/lib/minions"

___x_cmd_chat_minion_path(){
    [ "$#" -gt 0 ] ||   set - ls
    local op="$1";      shift
    case "$op" in
        add|which|which_|ls)
            ___x_cmd_chat_minion_path_which_"$op" "$@" ;;
        *)
            N=chat M="Unsupported subcmd ==> $op" log:ret:64 ;;
    esac
}

# There is also foreach loop implementation
___x_cmd_chat_minion_path_which_(){
    local p="$___X_CMD_CHAT_MINION_PATH"
    while true; do
        case "$p" in
            *:*)
                e="${p%%:*}"
                p="${p#"$e":}"
                x_="$e/$1.minion.yml"
                [ ! -f "$x_" ] || return 0
                ;;
            "")
                x_=
                return 1
                ;;
            *)
                x_="$p/$1.minion.yml"
                [ -f "$x_" ]
                return
                ;;
        esac
    done

    # ! ___x_cmd_chat_minion_path_fore eval '[ -f "$e" ]'
}

___x_cmd_chat_minion_path_fore(){
    local e
    local p="$___X_CMD_CHAT_MINION_PATH"
    while true; do
        case "$p" in
            *:*)
                e="${p%%:*}"
                p="${p#"$e":}"
                "$@" || return $?
                ;;
            "")
                return 0
                ;;
            *)
                e="$p"
                "$@"
                return
                ;;
        esac
    done
}

___x_cmd_chat_minion_path_add(){
    local dir="$1"
    # [ -d "$dir" ] || cha:warn "Not a directory: $dir"
    ___X_CMD_CHAT_MINION_PATH="$dir:$___X_CMD_CHAT_MINION_PATH"
}

___x_cmd_chat_minion_path_ls(){

    ___x_cmd_cmds awk -v IFS=: '{ printf("%s\t%s\n", NR, $1); }' <<A
$___X_CMD_CHAT_MINION_PATH
A

}

