Last active
April 27, 2026 15:22
-
-
Save IPRIT/31d4babe28ac29aa1663f7134dff1d09 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| set -euo pipefail | |
| SKILL_NAME="yandex-delta" | |
| ARCHIVE_SHA256="46069f39caa0a12a3d04140bf46e1fa4196107410e758b8e545af1c679517357" | |
| say() { | |
| printf '%s\n' "$*" >&2 | |
| } | |
| fail() { | |
| say "Error: $*" | |
| exit 1 | |
| } | |
| has_tty() { | |
| [[ -r /dev/tty && -w /dev/tty ]] | |
| } | |
| ask() { | |
| local prompt="$1" | |
| local answer | |
| has_tty || fail "interactive input is not available; set YANDEX_DELTA_INSTALL_TARGET and retry" | |
| printf '%s' "$prompt" > /dev/tty | |
| IFS= read -r answer < /dev/tty | |
| printf '%s' "$answer" | |
| } | |
| expand_path() { | |
| local value="$1" | |
| case "$value" in | |
| "~") printf '%s\n' "$HOME" ;; | |
| "~/"*) printf '%s/%s\n' "$HOME" "${value#~/}" ;; | |
| *) printf '%s\n' "$value" ;; | |
| esac | |
| } | |
| decode_base64() { | |
| if base64 --decode </dev/null >/dev/null 2>&1; then | |
| base64 --decode | |
| else | |
| base64 -D | |
| fi | |
| } | |
| sha256_file() { | |
| local path="$1" | |
| if command -v shasum >/dev/null 2>&1; then | |
| LC_ALL=C shasum -a 256 "$path" | awk '{print $1}' | |
| elif command -v sha256sum >/dev/null 2>&1; then | |
| LC_ALL=C sha256sum "$path" | awk '{print $1}' | |
| else | |
| return 1 | |
| fi | |
| } | |
| choose_target_dir() { | |
| local target="${YANDEX_DELTA_INSTALL_TARGET:-}" | |
| local custom_dir="${YANDEX_DELTA_INSTALL_DIR:-}" | |
| local choice | |
| if [[ -z "$target" ]]; then | |
| say "Where should yandex-delta be installed?" | |
| say " 1) Codex (~/.codex/skills)" | |
| say " 2) Claude Code (~/.claude/skills)" | |
| say " 3) Custom directory" | |
| choice="$(ask "Choose 1/2/3 [2]: ")" | |
| case "${choice:-2}" in | |
| 1) target="codex" ;; | |
| 2) target="claude-code" ;; | |
| 3) target="custom" ;; | |
| *) fail "unknown choice: $choice" ;; | |
| esac | |
| fi | |
| case "$target" in | |
| codex) | |
| expand_path "${CODEX_HOME:-$HOME/.codex}/skills" | |
| ;; | |
| claude-code|claude) | |
| expand_path "$HOME/.claude/skills" | |
| ;; | |
| custom) | |
| if [[ -z "$custom_dir" ]]; then | |
| custom_dir="$(ask "Directory to install into: ")" | |
| fi | |
| [[ -n "$custom_dir" ]] || fail "custom directory is empty" | |
| expand_path "$custom_dir" | |
| ;; | |
| *) | |
| fail "unknown install target: $target" | |
| ;; | |
| esac | |
| } | |
| confirm_replace() { | |
| local install_dir="$1" | |
| local answer | |
| [[ -e "$install_dir" ]] || return 0 | |
| if [[ "${YANDEX_DELTA_ASSUME_YES:-}" == "1" ]]; then | |
| return 0 | |
| fi | |
| answer="$(ask "$install_dir already exists. Replace it? [y/N]: ")" | |
| case "$answer" in | |
| y|Y|yes|YES) return 0 ;; | |
| *) fail "installation cancelled" ;; | |
| esac | |
| } | |
| archive_payload() { | |
| cat <<'YDX_ARCHIVE_BASE64' | |
| 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 | |
| YDX_ARCHIVE_BASE64 | |
| } | |
| main() { | |
| command -v tar >/dev/null 2>&1 || fail "tar is required" | |
| command -v base64 >/dev/null 2>&1 || fail "base64 is required" | |
| command -v mktemp >/dev/null 2>&1 || fail "mktemp is required" | |
| local target_parent install_dir tmp_dir archive_path actual_sha extracted_dir final_tmp | |
| target_parent="$(choose_target_dir)" | |
| target_parent="${target_parent%/}" | |
| if [[ "$(basename "$target_parent")" == "$SKILL_NAME" ]]; then | |
| install_dir="$target_parent" | |
| target_parent="$(dirname "$target_parent")" | |
| else | |
| install_dir="$target_parent/$SKILL_NAME" | |
| fi | |
| confirm_replace "$install_dir" | |
| tmp_dir="$(mktemp -d)" | |
| YDX_INSTALL_TMP_DIR="$tmp_dir" | |
| trap 'rm -rf "${YDX_INSTALL_TMP_DIR:-}"' EXIT | |
| archive_path="$tmp_dir/$SKILL_NAME.tar.gz" | |
| archive_payload | decode_base64 > "$archive_path" | |
| if actual_sha="$(sha256_file "$archive_path")"; then | |
| [[ "$actual_sha" == "$ARCHIVE_SHA256" ]] || fail "archive checksum mismatch" | |
| else | |
| say "Warning: shasum/sha256sum not found; skipping checksum verification" | |
| fi | |
| mkdir -p "$target_parent" | |
| LC_ALL=C tar -xzf "$archive_path" -C "$tmp_dir" | |
| extracted_dir="$tmp_dir/$SKILL_NAME" | |
| [[ -f "$extracted_dir/SKILL.md" ]] || fail "embedded archive is invalid" | |
| final_tmp="$target_parent/.$SKILL_NAME.installing.$$" | |
| rm -rf "$final_tmp" | |
| cp -R "$extracted_dir" "$final_tmp" | |
| rm -rf "$install_dir" | |
| mv "$final_tmp" "$install_dir" | |
| say "Installed $SKILL_NAME to $install_dir" | |
| say "First run may take longer: the skill can download portable Node.js, Playwright, and a browser." | |
| } | |
| main "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment