📦 deps(skills): sync thirdparty skills

This commit is contained in:
ci[bot]
2026-08-24 09:30:06 +08:00
parent ecedf69b9c
commit 35e4ce316f
31 changed files with 362 additions and 357 deletions
+24 -24
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
# A wizard walks a human through a manual procedure step by step.
# A wizard walks a human through a manual procedure, step by step.
# Generated by the /wizard skill.
#
# Everything above the "STAGES" marker is the wizard library: do not hand-edit
@@ -9,7 +9,7 @@
set -euo pipefail
# ──────────────────────────────────────────────────────────────────────────
# Wizard library delightful, consistent UX. Identical across every wizard.
# Wizard library: delightful, consistent UX, identical across every wizard.
# ──────────────────────────────────────────────────────────────────────────
if [[ -t 1 ]] && command -v tput >/dev/null 2>&1 && [[ "$(tput colors 2>/dev/null || echo 0)" -ge 8 ]]; then
@@ -28,25 +28,25 @@ WRITTEN_ENV=() # KEYs written to ENV_FILE this run
WRITTEN_SECRET=() # secret NAMEs set this run
SKIPPED=() # things we couldn't do (e.g. gh missing)
# _clear wipe the terminal so only the current step is on screen. No-op when
# _clear wipes the terminal so only the current step is on screen. No-op when
# output isn't a terminal, so piped logs stay readable.
_clear() {
[[ -t 1 ]] || return 0
if command -v tput >/dev/null 2>&1; then tput clear; else printf '\033[2J\033[3J\033[H'; fi
}
# banner "Title" opening frame: what this wizard does.
# banner "Title" shows the opening frame: what this wizard does.
banner() {
_clear
printf '\n%s%s %s%s\n' "$BOLD" "$BLUE" "$1" "$RESET"
printf '%s %s stages%s\n\n' "$DIM" "$TOTAL_STAGES" "$RESET"
printf '%s You drive the browser; this wizard tells you exactly what to do and\n' "$DIM"
printf ' captures the values you copy back. Stop any time with Ctrl-C and re-run\n'
printf ' later it remembers values already saved.%s\n' "$RESET"
printf ' later, since it remembers values already saved.%s\n' "$RESET"
pause "Ready to start?"
}
# stage "Name" clear the screen, then announce a stage and show progress.
# stage "Name" clears the screen, then announces a stage and shows progress.
# Clearing keeps only the current step on screen.
stage() {
_clear
@@ -55,14 +55,14 @@ stage() {
"$BOLD" "$BLUE" "$_STAGE_INDEX" "$TOTAL_STAGES" "$1" "$RESET"
}
# say "..." a plain instruction line.
# say "..." prints a plain instruction line.
say() { printf ' %s\n' "$1"; }
# step "..." a numbered-feeling action the human takes in the browser.
# step "..." is a numbered-feeling action the human takes in the browser.
step() { printf ' %s•%s %s\n' "$BLUE" "$RESET" "$1"; }
note() { printf ' %s%s%s\n' "$DIM" "$1" "$RESET"; }
warn() { printf ' %s⚠ %s%s\n' "$YELLOW" "$1" "$RESET"; }
# open_url URL open in the human's browser, cross-platform incl. WSL.
# open_url URL opens it in the human's browser, cross-platform incl. WSL.
open_url() {
local url="$1"
printf ' %s↗ opening%s %s\n' "$GREEN" "$RESET" "$url"
@@ -70,17 +70,17 @@ open_url() {
elif command -v explorer.exe >/dev/null 2>&1; then explorer.exe "$url"
elif command -v xdg-open >/dev/null 2>&1; then xdg-open "$url"
elif command -v open >/dev/null 2>&1; then open "$url"
else warn "couldn't open a browser visit it manually: $url"; fi
} >/dev/null 2>&1 || warn "couldn't open a browser visit it manually: $url"
else warn "couldn't open a browser; visit it manually: $url"; fi
} >/dev/null 2>&1 || warn "couldn't open a browser, so visit it manually: $url"
}
# pause "msg" wait for the human to confirm they've done the manual part.
# pause "msg" waits for the human to confirm they've done the manual part.
pause() {
printf ' %s%s%s ' "$DIM" "${1:-Press Enter to continue}" "$RESET"
read -r _ || true
}
# confirm "question" y/N gate; returns success on yes.
# confirm "question" is a y/N gate; returns success on yes.
confirm() {
local reply=""
printf ' %s? %s [y/N] ' "$YELLOW" "$1"
@@ -88,14 +88,14 @@ confirm() {
[[ "$reply" =~ ^[Yy] ]]
}
# _existing KEY current value of KEY in ENV_FILE, if any.
# _existing KEY: current value of KEY in ENV_FILE, if any.
_existing() {
[[ -f "$ENV_FILE" ]] || return 1
local line; line=$(grep -E "^${1}=" "$ENV_FILE" | tail -n1) || return 1
printf '%s' "${line#*=}"
}
# ask KEY "Prompt" read a value into $KEY. Offers the existing .env value as
# ask KEY "Prompt" reads a value into $KEY. Offers the existing .env value as
# a default on re-runs (Enter keeps it). Visible input (non-secret).
ask() {
local key="$1" prompt="$2" current input
@@ -110,7 +110,7 @@ ask() {
printf -v "$key" '%s' "$input"
}
# ask_secret KEY "Prompt" like ask, but input is hidden.
# ask_secret KEY "Prompt" is like ask, but input is hidden.
ask_secret() {
local key="$1" prompt="$2" current input
current=$(_existing "$key" || true)
@@ -125,7 +125,7 @@ ask_secret() {
printf -v "$key" '%s' "$input"
}
# write_env KEY VALUE upsert KEY=VALUE into ENV_FILE (creates it; replaces
# write_env KEY VALUE upserts KEY=VALUE into ENV_FILE (creates it; replaces
# any existing line). Idempotent.
write_env() {
local key="$1" value="$2" tmp
@@ -138,7 +138,7 @@ write_env() {
printf ' %s✓ wrote%s %s → %s\n' "$GREEN" "$RESET" "$key" "$ENV_FILE"
}
# set_secret NAME VALUE set a GitHub Actions repo secret via gh. Falls back
# set_secret NAME VALUE sets a GitHub Actions repo secret via gh. Falls back
# to a warning (and records it) if gh is unavailable or unauthenticated.
set_secret() {
local name="$1" value="$2"
@@ -150,10 +150,10 @@ set_secret() {
fi
fi
SKIPPED+=("GitHub secret $name (set it manually: gh secret set $name)")
warn "skipped GitHub secret $name gh not ready; set it later"
warn "skipped GitHub secret $name: gh not ready; set it later"
}
# set_var NAME VALUE set a GitHub Actions repo variable (non-secret).
# set_var NAME VALUE sets a GitHub Actions repo variable (non-secret).
set_var() {
local name="$1" value="$2"
if command -v gh >/dev/null 2>&1 && gh auth status >/dev/null 2>&1; then
@@ -163,10 +163,10 @@ set_var() {
fi
fi
SKIPPED+=("GitHub variable $name")
warn "skipped GitHub variable $name gh not ready; set it later"
warn "skipped GitHub variable $name, gh not ready; set it later"
}
# finish clear, then a closing summary of everything configured.
# finish clears, then shows a closing summary of everything configured.
finish() {
_clear
printf '\n%s%s ✓ Setup complete%s\n' "$BOLD" "$GREEN" "$RESET"
@@ -180,7 +180,7 @@ finish() {
}
# ──────────────────────────────────────────────────────────────────────────
# STAGES author this section. One stage() per step the human takes.
# STAGES: author this section. One stage() per step the human takes.
# Replace the example below. Set TOTAL_STAGES to match the stages you write.
# ──────────────────────────────────────────────────────────────────────────
@@ -189,7 +189,7 @@ TOTAL_STAGES=1
banner "Stripe setup"
# ── Example stage: replace with your real steps ───────────────────────────
stage "Stripe API keys"
stage "Stripe: API keys"
say "We'll grab your Stripe test keys and store them for local dev + CI."
open_url "https://dashboard.stripe.com/test/apikeys"
step "On the API keys page, copy the Publishable key (starts pk_test_)."