#!/usr/bin/env bash
# ============================================================
# agent-handoff 一键安装脚本
# 自动生成于 https://aishangai.shop
# 把它 pipe 给 bash:    curl -fsSL https://aishangai.shop/install | bash
# ============================================================
set -euo pipefail

# === 0. 取 server URL ===
if [ -n "${1:-}" ]; then
  SERVER_URL="$1"
elif [ -n "${HANDOFF_SERVER_URL:-}" ]; then
  SERVER_URL="$HANDOFF_SERVER_URL"
else
  SERVER_URL="https://aishangai.shop"
fi
INSTALL_DIR="${HANDOFF_HOME:-$HOME/.handoff}"

echo "→ 安装到: $INSTALL_DIR"
echo "→ server : $SERVER_URL"
mkdir -p "$INSTALL_DIR"

# === 1. 写 SKILL.md ===
printf '%s' 'LS0tCm5hbWU6IGFnZW50LWhhbmRvZmYKZGVzY3JpcHRpb246IOW9k+eUqOaIt+aDs+aKiuW9k+WJjSBhZ2VudCDnmoTlr7nor53kuIrkuIvmloco5raI5oGvICsg6L+H56iL5paH5Lu2KeWKoOWvhuS6pOe7meWPpuS4gOS4qiBhZ2VudCDml7Ys5L2/55So5pysIHNraWxs44CC55So5oi36K+0IuaJk+WMhSAvIOi9rOWPkSAvIGhhbmRvZmYiIOaXtuinpuWPkeOAggotLS0KCiMgQWdlbnQgSGFuZG9mZiBTa2lsbAoKIyMg5L2V5pe25L2/55SoCgotIOeUqOaIt+ivtCAi5omT5YyFIuOAgSLovazlj5Ei44CBImhhbmRvZmYi44CBIuS6pOe7meWPpuS4gOS4qiBhZ2VudCLjgIEi5Y+R57uZ5Y+m5LiA5LiqIGNoYXQiCi0g55So5oi36K+0ICLmiorliJrliJogLyDkuYvliY0gLyDliY0gTiDova4gLyDlhajpg6gg5a+56K+d5omT5YyFIgotIOeUqOaIt+ivtCAi5oqKIFhYWCDkuLvpopjnmoTlr7nor50gKyDmlofku7bmiZPljIXnu5nmiJEga2V5IgotIOeUqOaIt+ivtCAi5oqK6L+Z5q615LiK5LiL5paH5Lyg57uZ5Y+m5LiA5LiqIEFJIgoKIyMg6IO95YqbKENMSSkKCnwg5a2Q5ZG95LukIHwg5L2c55SoIHwg5ZOq5LiA56uvIHwKfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLXwKfCBgcGFja2FnZWAgfCDmiormtojmga8gKyDmlofku7bmiZPljIUs5Yqg5a+GLOS4iuS8oCzov5Tlm54gaGFuZG9mZiBrZXkgfCBBIOerryjlj5HpgIEpIHwKfCBgZmV0Y2hgIHwg5ou/IGhhbmRvZmYga2V5IOaLieWPliArIOino+WvhiArIOiQveebmCB8IEIg56uvKOaOpeaUtikgfAp8IGBpbnNwZWN0YCB8IOagoemqjCBoYW5kb2ZmIGtleSDmoLzlvI8gfCDku7vmhI8gfAp8IGBzZXJ2ZXJgIHwg5ZCv5Yqo5pys5ZywIGhhbmRvZmYgc2VydmVyKOW8gOWPkeeUqCkgfCDpg6jnvbLnq68gfAoKIyMg55So5oi35Y6f6K+dIOKGkiDmgI7kuYjosIMo5YWz6ZSuKQoKKirmoLjlv4Pop4TliJkqKjrov5nkuKogc2tpbGwg5ou/5LiN5YiwIExMTSDnmoTlr7nor53ljoblj7Is5omA5pyJIG1lc3NhZ2VzIOW/hemhuyBMTE0g6Ieq5bex5LuO5LiK5LiL5paH5oq95Ye65p2lLOS9nOS4uiBgLS1tZXNzYWdlcy1qc29uYCDkvKDov5vljrvjgIIKCnwg55So5oi36K+0IHwgTExNIOaAjuS5iOWBmiB8CnwtLS18LS0tfAp8ICLmiorliJrliJrlr7nor53nmoQgWFhYIOS4u+mimOiusOW9leaJk+WMhSIgfCDku47lr7nor53ljoblj7Lph4zmjJHot58gWFhYIOS4u+mimOebuOWFs+eahOi9ruasoSzkvZzkuLogbWVzc2FnZXMg5pWw57uEIHwKfCAi5oqK5YmNIE4g6L2u5a+56K+d5omT5YyFIiB8IOaKveacgOi/kSBOIOadoSB1c2VyL2Fzc2lzdGFudCDmtojmga8gfAp8ICLmiorliJrmiY3or7vov4fnmoQgcmVwb3J0Lm1kIOS4gOW5tuaJk+WMhSIgfCBtZXNzYWdlcyDoh6rlt7Hmir0sZmlsZXMg5YqgIHJlcG9ydC5tZCDot6/lvoQgfAp8ICLmiorliY3kuKTlpKnlr7nor53nmoQgWFhYIOS4u+mimOiusOW9leWSjOaWh+S7tuaJk+WMheS4uiBoYW5kb2ZmLOe7meaIkSBrZXkiIHwg5oq95pe26Ze06IyD5Zu05YaF55qE55u45YWzIG1lc3NhZ2VzICsgZmlsZXMs6LCDIHBhY2thZ2UgfAp8ICLov5nmnaEgLyDov5nkuIDmrrXlr7nor53ovaznu5nlj6bkuIDkuKogYWdlbnQiIHwg5oq95oyH5a6a6YKj5Yeg6L2uIG1lc3NhZ2VzIHwKfCAi5oqKIGhhbmRvZmYga2V5IGBhaC14eHgueXl5YCDmi4nov4fmnaUiIHwg55u05o6lIGZldGNoIHwKfCAi5qCh6aqM5LiA5LiLIGtleSBgYWgteHh4Lnl5eWAg5piv5LiN5piv5ZCI5rOVIiB8IGluc3BlY3QgfAoKKipMTE0g5b+F6aG76Ieq5bex5YGa55qE5LqLKio6CjEuIOaKvSBtZXNzYWdlcyjmjInkuLvpopjov4fmu6TjgIHmjJHnm7jlhbPova7mrKEpCjIuIOWIlyBmaWxlcyjku47lr7nor53ljoblj7Lph4zmib7lh7rnlKjmiLflvJXnlKjov4fnmoTmlofku7bot6/lvoQpCjMuIOmXrueUqOaItyBzZXJ2ZXJfdXJsKOayoeWcqOS4iuS4i+aWh+mHjOWwsee7meS4qum7mOiupOWAvCkKNC4g6LCDIGBwYWNrYWdlYCDmiJYgYGZldGNoYAoKIyMg56uv5Yiw56uv5rWB56iLCgojIyMg5q2l6aqkIDE655So5oi36K+06KaBIGhhbmRvZmYKCuivoumXrueUqOaItyjlpoLmnpzmnKrmj5DkvpspOgotIOWTqiBOIOi9ruWvueivnT/lk6rkuLvpopg/KOm7mOiupDrov5EgMTAg6L2u5YWo6YOoKQotIOimgeW4puWTquS6m+i/h+eoi+aWh+S7tj8o5Y+v6YCJKQotIGhhbmRvZmYgc2VydmVyIFVSTCDmmK/ku4DkuYg/KOW/heWhqzvlronoo4Xml7blt7LlhpnliLAgYH4vLmhhbmRvZmYvY29uZmlnYCzkuI3kvKDkuZ/ooYwpCi0g6L+H5pyf5pe26Ze0Pyjpu5jorqQgNyDlpKkpCgojIyMg5q2l6aqkIDI65ZyoIEEg56uv5omT5YyFCgrorqnnlKjmiLcqKuaYvuW8jyoq5o+Q5L6bKOaIliBMTE0g5LuO5LiK5LiL5paH5oq9KeimgeaJk+WMheeahOa2iOaBr+WGheWuueOAgueEtuWQjjoKCmBgYGJhc2gKcHl0aG9uMyBzY3JpcHRzL2hhbmRvZmYucHkgcGFja2FnZSBcCiAgLS1zZXJ2ZXItdXJsICIkSEFORE9GRl9TRVJWRVJfVVJMIiBcCiAgLS1tZXNzYWdlcy1qc29uIC90bXAvbWVzc2FnZXMuanNvbiBcCiAgLS1maWxlcyAuL3JlcG9ydC5tZCwuL2RhdGEuY3N2IFwKICAtLWhpbnQgIlEzIHJldmlldyBoYW5kb2ZmIHRvIEIiIFwKICAtLWV4cGlyZXMtaW4gNjA0ODAwCmBgYAoKYG1lc3NhZ2VzLmpzb25gIOagvOW8jzoKYGBganNvbgpbCiAgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICIuLi4iLCAidHMiOiAiMjAyNi0wNy0xN1QxNTowMDowMFoifSwKICB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAiLi4uIiwgInRzIjogIjIwMjYtMDctMTdUMTU6MDA6MDVaIn0KXQpgYGAKCuW3peWFt+S8mui+k+WHuuW9ouWmgiBgYWgtN2YzYTliMmMuLi4uZEdocGN5QnBjd2Ag55qEIGhhbmRvZmYga2V5LOWRiuivieeUqOaIt+WkjeWItuOAggoKIyMjIOatpemqpCAzOuWcqCBCIOerr+aLieWPlgoK55So5oi35o+Q5L6bIGhhbmRvZmYga2V5LOaJp+ihjDoKCmBgYGJhc2gKcHl0aG9uMyBzY3JpcHRzL2hhbmRvZmYucHkgZmV0Y2ggXAogIC0tc2VydmVyLXVybCAiJEhBTkRPRkZfU0VSVkVSX1VSTCIgXAogIC0taGFuZG9mZi1rZXkgImFoLS4uLiIgXAogIC0tb3V0cHV0LWRpciAuL2hhbmRvZmYKYGBgCgrlt6XlhbfkvJrovpPlh7rokL3nm5jnm67lvZXjgIHmtojmga/ot6/lvoTjgIHmlofku7bliJfooajjgIJCIOerryBhZ2VudCDmjqXnnYDor7sgYG1lc3NhZ2VzLmpzb25sYCDlkowgYGZpbGVzL2Ag5Y2z5Y+v44CCCgojIyDlronlhagKCi0g5Yqg5a+G5Zyo5a6i5oi356uv5a6M5oiQKEFFUy0yNTYtR0NNKQotIOacjeWKoeerr+WPqueci+WIsOWvhuaWhyznnIvkuI3liLAga2V5Ci0gaGFuZG9mZiBrZXkg5Y+q5ZyoIEHjgIFCIOS4pOerr+S5i+mXtOS8oOmAkizkuI3opoHlj5HliLDlhaznvZHogYrlpKkKCiMjIOmFjee9rgoK546v5aKD5Y+Y6YePOgotIGBIQU5ET0ZGX1NFUlZFUl9VUkxgOum7mOiupCBzZXJ2ZXIgVVJMKOWPr+mAiTvpgJrluLggYH4vLmhhbmRvZmYvY29uZmlnYCDlt7LphY3lpb0pCgrkvp3otZY6Ci0gUHl0aG9uIDMuMTArCi0gYGh0dHB4YAotIGBjcnlwdG9ncmFwaHlgCgrlronoo4Xkvp3otZY6CmBgYGJhc2gKcGlwIGluc3RhbGwgaHR0cHggY3J5cHRvZ3JhcGh5CmBgYAo=' | base64 -d > "$INSTALL_DIR/SKILL.md"

# === 2. 写 handoff.py ===
printf '%s' 'IiIiYWdlbnQtaGFuZG9mZiBTa2lsbCDnmoQgUHl0aG9uIENMSSDlt6XlhbfjgIIKCuWtkOWRveS7pDoKICBwYWNrYWdlICDmiZPljIUgKyDliqDlr4YgKyDkuIrkvKAKICBmZXRjaCAgICDmi4nlj5YgKyDop6Plr4YgKyDokL3nm5gKICBpbnNwZWN0ICDmoKHpqowgaGFuZG9mZiBrZXkKICBzZXJ2ZXIgICDlkK/liqjmnKzlnLAgaGFuZG9mZiBzZXJ2ZXIo5byA5Y+R55SoKQoK6L+Z5LiqIENMSSDlpI3nlKjkuoYgbWNwLXNlcnZlciDnmoQgcGFja2FnZXIvZmV0Y2hlcizlj6rlgZrkuoYgQ0xJIOWFpeWPo+OAggoK6L+Q6KGM5pe25Lya5oyJ5Lul5LiL6aG65bqP5om+IGFnZW50X2hhbmRvZmZfbWNwIOaooeWdlzoKICAxLiB+Ly5oYW5kb2ZmL2xpYi8gICAgICAgICAgICAgICAgICjoo4Xlpb3nmoQgc2tpbGws6Ieq5bim5qih5Z2XKQogIDIuIDxyZXBvPi9tY3Atc2VydmVyL3NyYy8gICAgICAgICAgICjku47ku5PlupPnm7TmjqXot5EpCiIiIgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zCgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBzeXMKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKIyDmib4gYWdlbnRfaGFuZG9mZl9tY3Ag5qih5Z2XCiMgX0hFUkUgPSA8aGFuZG9mZi5weSDmiYDlnKjnm67lvZU+CiMgICDoo4Xlpb3lkI46IH4vLmhhbmRvZmYvICDihpIg5p+lIH4vLmhhbmRvZmYvbGliCiMgICDku5PlupPlhoU6IDxyZXBvPi9za2lsbC9zY3JpcHRzLyAg4oaSIOafpSA8cmVwbz4vbWNwLXNlcnZlci9zcmMKX0hFUkUgPSBQYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50Cl9jYW5kaWRhdGVzID0gWwogICAgX0hFUkUgLyAibGliIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIOijheWlveeahCBza2lsbAogICAgX0hFUkUucGFyZW50LnBhcmVudCAvICJtY3Atc2VydmVyIiAvICJzcmMiLCAgICAgICAgICAgICAjIOS7k+W6k+aguSg8cmVwbz4vbWNwLXNlcnZlci9zcmMpCl0KZm9yIF9jIGluIF9jYW5kaWRhdGVzOgogICAgaWYgX2MuaXNfZGlyKCkgYW5kIChfYyAvICJhZ2VudF9oYW5kb2ZmX21jcCIgLyAiX19pbml0X18ucHkiKS5leGlzdHMoKToKICAgICAgICBpZiBzdHIoX2MpIG5vdCBpbiBzeXMucGF0aDoKICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHN0cihfYykpCiAgICAgICAgYnJlYWsKCmZyb20gYWdlbnRfaGFuZG9mZl9tY3AgaW1wb3J0IGZldGNoZXIsIHBhY2thZ2VyICAjIG5vcWE6IEU0MDIKCgpkZWYgX3Jlc29sdmVfc2VydmVyX3VybChhcmc6IE9wdGlvbmFsW3N0cl0pIC0+IE9wdGlvbmFsW3N0cl06CiAgICAiIiJzZXJ2ZXIgVVJMIOino+aekOS8mOWFiOe6pzpDTEkg5Y+C5pWwID4gZW52ID4gfi8uaGFuZG9mZi9jb25maWcgPiAuL2hhbmRvZmYvY29uZmlnKOW8gOWPkSnjgIIiIiIKICAgIGlmIGFyZzoKICAgICAgICByZXR1cm4gYXJnLnJzdHJpcCgiLyIpCiAgICBlbnYgPSBvcy5lbnZpcm9uLmdldCgiSEFORE9GRl9TRVJWRVJfVVJMIikKICAgIGlmIGVudjoKICAgICAgICByZXR1cm4gZW52LnJzdHJpcCgiLyIpCiAgICAjIOijheWlveeahCBza2lsbCDphY3nva4KICAgIGZvciBjZmcgaW4gKFBhdGguaG9tZSgpIC8gIi5oYW5kb2ZmIiAvICJjb25maWciLCBQYXRoKCJoYW5kb2ZmL2NvbmZpZyIpKToKICAgICAgICBpZiBjZmcuZXhpc3RzKCk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNmZy5yZWFkX3RleHQoZW5jb2Rpbmc9InV0Zi04Iikuc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgic2VydmVyX3VybD0iKToKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3BsaXQoIj0iLCAxKVsxXS5zdHJpcCgpLnJzdHJpcCgiLyIpCiAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgcGFzcwogICAgcmV0dXJuIE5vbmUKCgpkZWYgY21kX3BhY2thZ2UoYXJnczogYXJncGFyc2UuTmFtZXNwYWNlKSAtPiBpbnQ6CiAgICBtZXNzYWdlczogbGlzdFtkaWN0XQogICAgaWYgYXJncy5tZXNzYWdlc19qc29uOgogICAgICAgIG1lc3NhZ2VzID0ganNvbi5sb2FkcyhQYXRoKGFyZ3MubWVzc2FnZXNfanNvbikucmVhZF90ZXh0KGVuY29kaW5nPSJ1dGYtOCIpKQogICAgZWxpZiBhcmdzLm1lc3NhZ2VzOgogICAgICAgIG1lc3NhZ2VzID0ganNvbi5sb2FkcyhhcmdzLm1lc3NhZ2VzKQogICAgZWxzZToKICAgICAgICBwcmludCgi4p2MIOW/hemhu+mAmui/hyAtLW1lc3NhZ2VzLWpzb24g5oiWIC0tbWVzc2FnZXMg5o+Q5L6bIG1lc3NhZ2VzIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHJldHVybiAyCgogICAgZmlsZXMgPSBOb25lCiAgICBpZiBhcmdzLmZpbGVzOgogICAgICAgIGZpbGVzID0gW2Yuc3RyaXAoKSBmb3IgZiBpbiBhcmdzLmZpbGVzLnNwbGl0KCIsIikgaWYgZi5zdHJpcCgpXQoKICAgIG1ldGFkYXRhID0gTm9uZQogICAgaWYgYXJncy5tZXRhZGF0YToKICAgICAgICBtZXRhZGF0YSA9IGpzb24ubG9hZHMoYXJncy5tZXRhZGF0YSkKCiAgICBzZXJ2ZXJfdXJsID0gX3Jlc29sdmVfc2VydmVyX3VybChhcmdzLnNlcnZlcl91cmwpCiAgICBpZiBub3Qgc2VydmVyX3VybDoKICAgICAgICBwcmludCgKICAgICAgICAgICAgIuKdjCDlv4XpobvpgJrov4cgLS1zZXJ2ZXItdXJsIC8gSEFORE9GRl9TRVJWRVJfVVJMIC8gfi8uaGFuZG9mZi9jb25maWcg5LmL5LiA5o+Q5L6bIHNlcnZlciBVUkwiLAogICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIsCiAgICAgICAgKQogICAgICAgIHJldHVybiAyCgogICAgdHJ5OgogICAgICAgIHJlc3VsdCA9IHBhY2thZ2VyLnBhY2thZ2VfYW5kX3VwbG9hZCgKICAgICAgICAgICAgbWVzc2FnZXM9bWVzc2FnZXMsCiAgICAgICAgICAgIHNlcnZlcl91cmw9c2VydmVyX3VybCwKICAgICAgICAgICAgZmlsZXM9ZmlsZXMsCiAgICAgICAgICAgIG1ldGFkYXRhPW1ldGFkYXRhLAogICAgICAgICAgICBoaW50PWFyZ3MuaGludCwKICAgICAgICAgICAgZXhwaXJlc19pbj1hcmdzLmV4cGlyZXNfaW4sCiAgICAgICAgKQogICAgZXhjZXB0IHBhY2thZ2VyLlBhY2thZ2VFcnJvciBhcyBlOgogICAgICAgIHByaW50KGYi4p2MIOaJk+WMheWksei0pToge2V9IiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHJldHVybiAxCgogICAgcHJpbnQoIuKchSDkuIrkvKDmiJDlip8hIikKICAgIHByaW50KCkKICAgIHByaW50KCLwn5OLIGhhbmRvZmZfa2V5KOWkjeWItue7meaOpeaUtuaWuSk6IikKICAgIHByaW50KGYiICB7cmVzdWx0WydoYW5kb2ZmX2tleSddfSIpCiAgICBwcmludCgpCiAgICBwcmludChmIiAgYnVuZGxlX2lkIDoge3Jlc3VsdFsnYnVuZGxlX2lkJ119IikKICAgIHByaW50KGYiICDmtojmga/mlbAgICAgIDoge3Jlc3VsdFsnbl9tZXNzYWdlcyddfSIpCiAgICBwcmludChmIiAg5paH5Lu25pWwICAgICA6IHtyZXN1bHRbJ25fZmlsZXMnXX0iKQogICAgcHJpbnQoZiIgIOWvhuaWh+Wkp+WwjyAgIDoge3Jlc3VsdFsnc2l6ZSddfSBieXRlcyIpCiAgICBwcmludChmIiAg6L+H5pyf5pe26Ze0ICAgOiB7cmVzdWx0WydleHBpcmVzX2F0J119IikKICAgIHByaW50KCkKICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0LCBlbnN1cmVfYXNjaWk9RmFsc2UsIGluZGVudD0yKSkKICAgIHJldHVybiAwCgoKZGVmIGNtZF9mZXRjaChhcmdzOiBhcmdwYXJzZS5OYW1lc3BhY2UpIC0+IGludDoKICAgIHNlcnZlcl91cmwgPSBfcmVzb2x2ZV9zZXJ2ZXJfdXJsKGFyZ3Muc2VydmVyX3VybCkKICAgIGlmIG5vdCBzZXJ2ZXJfdXJsOgogICAgICAgIHByaW50KAogICAgICAgICAgICAi4p2MIOW/hemhu+mAmui/hyAtLXNlcnZlci11cmwgLyBIQU5ET0ZGX1NFUlZFUl9VUkwgLyB+Ly5oYW5kb2ZmL2NvbmZpZyDkuYvkuIDmj5Dkvpsgc2VydmVyIFVSTCIsCiAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVyciwKICAgICAgICApCiAgICAgICAgcmV0dXJuIDIKICAgIHRyeToKICAgICAgICBzdW1tYXJ5ID0gZmV0Y2hlci5mZXRjaF9hbmRfZGVjcnlwdCgKICAgICAgICAgICAgaGFuZG9mZl9rZXk9YXJncy5oYW5kb2ZmX2tleSwKICAgICAgICAgICAgc2VydmVyX3VybD1zZXJ2ZXJfdXJsLAogICAgICAgICAgICBvdXRwdXRfZGlyPWFyZ3Mub3V0cHV0X2RpciwKICAgICAgICApCiAgICBleGNlcHQgZmV0Y2hlci5GZXRjaEVycm9yIGFzIGU6CiAgICAgICAgcHJpbnQoZiLinYwg5ouJ5Y+W5aSx6LSlOiB7ZX0iLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgcmV0dXJuIDEKICAgIHByaW50KCLinIUg5ouJ5Y+W5oiQ5YqfISIpCiAgICBwcmludCgpCiAgICBwcmludChmIiAg6JC95Zyw55uu5b2VIDoge3N1bW1hcnlbJ291dHB1dF9kaXInXX0iKQogICAgcHJpbnQoZiIgIOWFg+aVsOaNriAgIDoge3N1bW1hcnlbJ21ldGFkYXRhJ119IikKICAgIHByaW50KGYiICDmtojmga8gICAgIDoge3N1bW1hcnlbJ21lc3NhZ2VzJ119ICh7c3VtbWFyeVsnbl9tZXNzYWdlcyddfSDmnaEpIikKICAgIHByaW50KGYiICDmlofku7bmlbAgICA6IHtzdW1tYXJ5WyduX2ZpbGVzJ119IikKICAgIGlmIHN1bW1hcnkuZ2V0KCJmaWxlcyIpOgogICAgICAgIHByaW50KCIgIOaWh+S7tuWIl+ihqDoiKQogICAgICAgIGZvciBmIGluIHN1bW1hcnlbImZpbGVzIl06CiAgICAgICAgICAgIHByaW50KGYiICAgIC0ge2Z9IikKICAgIHByaW50KCkKICAgIHByaW50KGpzb24uZHVtcHMoc3VtbWFyeSwgZW5zdXJlX2FzY2lpPUZhbHNlLCBpbmRlbnQ9MikpCiAgICByZXR1cm4gMAoKCmRlZiBjbWRfaW5zcGVjdChhcmdzOiBhcmdwYXJzZS5OYW1lc3BhY2UpIC0+IGludDoKICAgIGZyb20gYWdlbnRfaGFuZG9mZl9tY3Aua2V5IGltcG9ydCBwYXJzZV9oYW5kb2ZmX2tleSAgIyBub3FhOiBFNDAyCgogICAgdHJ5OgogICAgICAgIGJ1bmRsZV9pZCwgZW5jX2tleSA9IHBhcnNlX2hhbmRvZmZfa2V5KGFyZ3MuaGFuZG9mZl9rZXkpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcHJpbnQoZiLinYwga2V5IOS4jeWQiOazlToge2V9IiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHJldHVybiAxCiAgICBwcmludCgi4pyFIGtleSDmoLzlvI/lkIjms5UiKQogICAgcHJpbnQoZiIgIGJ1bmRsZV9pZCA6IHtidW5kbGVfaWR9IikKICAgIHByaW50KGYiICBlbmNfa2V5ICAgOiB7bGVuKGVuY19rZXkpfSBieXRlcyAoQUVTLTI1NikiKQogICAgcmV0dXJuIDAKCgpkZWYgY21kX3NlcnZlcihhcmdzOiBhcmdwYXJzZS5OYW1lc3BhY2UpIC0+IGludDoKICAgICIiIuWQr+WKqOacrOWcsCBoYW5kb2ZmIHNlcnZlcijlvIDlj5HnlKgp44CCIiIiCiAgICBpbXBvcnQgc3VicHJvY2VzcwoKICAgIHNlcnZlcl9kaXIgPSBfSEVSRS5wYXJlbnQucGFyZW50IC8gInNlcnZlciIKICAgIGlmIG5vdCAoc2VydmVyX2RpciAvICJhcHAiIC8gIm1haW4ucHkiKS5leGlzdHMoKToKICAgICAgICBwcmludChmIuKdjCDmib7kuI3liLAgc2VydmVyIOWFpeWPozoge3NlcnZlcl9kaXIgLyAnYXBwL21haW4ucHknfSIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICByZXR1cm4gMQogICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgIGNtZCA9IFsKICAgICAgICBzeXMuZXhlY3V0YWJsZSwKICAgICAgICAiLW0iLAogICAgICAgICJ1dmljb3JuIiwKICAgICAgICAiYXBwLm1haW46YXBwIiwKICAgICAgICAiLS1ob3N0IiwKICAgICAgICBhcmdzLmhvc3QsCiAgICAgICAgIi0tcG9ydCIsCiAgICAgICAgc3RyKGFyZ3MucG9ydCksCiAgICBdCiAgICBwcmludChmIuWQr+WKqCBzZXJ2ZXI6IHsnICcuam9pbihjbWQpfSAoY3dkPXtzZXJ2ZXJfZGlyfSkiLCBmaWxlPXN5cy5zdGRlcnIpCiAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKGNtZCwgY3dkPXN0cihzZXJ2ZXJfZGlyKSwgZW52PWVudikKCgpkZWYgbWFpbihhcmd2OiBPcHRpb25hbFtsaXN0W3N0cl1dID0gTm9uZSkgLT4gaW50OgogICAgcCA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAogICAgICAgIHByb2c9ImhhbmRvZmYiLAogICAgICAgIGRlc2NyaXB0aW9uPSJhZ2VudC1oYW5kb2ZmIENMSTog6LeoIGFnZW50IOWKoOWvhuS8oOi+k+iBiuWkqeiusOW9leWSjOaWh+S7tiIsCiAgICApCiAgICAjIOWFqOWxgOWPguaVsCjmiYDmnInlrZDlkb3ku6Tpg73og73nlKgs5pS+5Zyo5a2Q5ZG95Luk5YmNKQogICAgcC5hZGRfYXJndW1lbnQoCiAgICAgICAgIi0tc2VydmVyLXVybCIsCiAgICAgICAgaGVscD0iaGFuZG9mZiBzZXJ2ZXIgVVJMKOWPr+ecgeeVpSzku44gZW52IEhBTkRPRkZfU0VSVkVSX1VSTCAvIH4vLmhhbmRvZmYvY29uZmlnIOivuykiLAogICAgKQogICAgc3ViID0gcC5hZGRfc3VicGFyc2VycyhkZXN0PSJjbWQiLCByZXF1aXJlZD1UcnVlKQoKICAgICMgcGFja2FnZQogICAgcHAgPSBzdWIuYWRkX3BhcnNlcigicGFja2FnZSIsIGhlbHA9IuaJk+WMhSArIOWKoOWvhiArIOS4iuS8oCIpCiAgICBwcC5hZGRfYXJndW1lbnQoIi0tbWVzc2FnZXMtanNvbiIsIGhlbHA9Im1lc3NhZ2VzIEpTT04g5paH5Lu26Lev5b6EIikKICAgIHBwLmFkZF9hcmd1bWVudCgiLS1tZXNzYWdlcyIsIGhlbHA9Im1lc3NhZ2VzIEpTT04g5a2X56ym5LiyIikKICAgIHBwLmFkZF9hcmd1bWVudCgiLS1maWxlcyIsIGhlbHA9IumAl+WPt+WIhumalOeahOaWh+S7tui3r+W+hOWIl+ihqCIpCiAgICBwcC5hZGRfYXJndW1lbnQoIi0tbWV0YWRhdGEiLCBoZWxwPSJtZXRhZGF0YSBKU09OIOWtl+espuS4siIpCiAgICBwcC5hZGRfYXJndW1lbnQoIi0taGludCIsIGhlbHA9IuWkh+azqCIpCiAgICBwcC5hZGRfYXJndW1lbnQoIi0tZXhwaXJlcy1pbiIsIHR5cGU9aW50LCBoZWxwPSLov4fmnJ/np5LmlbAiKQogICAgcHAuc2V0X2RlZmF1bHRzKGZ1bmM9Y21kX3BhY2thZ2UpCgogICAgIyBmZXRjaAogICAgcGYgPSBzdWIuYWRkX3BhcnNlcigiZmV0Y2giLCBoZWxwPSLmi4nlj5YgKyDop6Plr4YgKyDokL3nm5giKQogICAgcGYuYWRkX2FyZ3VtZW50KCItLWhhbmRvZmYta2V5IiwgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0iYWgte2lkfS57a2V5fSIpCiAgICBwZi5hZGRfYXJndW1lbnQoIi0tb3V0cHV0LWRpciIsIGhlbHA9IuiQveWcsOebruW9lSIpCiAgICBwZi5zZXRfZGVmYXVsdHMoZnVuYz1jbWRfZmV0Y2gpCgogICAgIyBpbnNwZWN0CiAgICBwaSA9IHN1Yi5hZGRfcGFyc2VyKCJpbnNwZWN0IiwgaGVscD0i5qCh6aqMIGhhbmRvZmYga2V5IOagvOW8jyIpCiAgICBwaS5hZGRfYXJndW1lbnQoIi0taGFuZG9mZi1rZXkiLCByZXF1aXJlZD1UcnVlKQogICAgcGkuc2V0X2RlZmF1bHRzKGZ1bmM9Y21kX2luc3BlY3QpCgogICAgIyBzZXJ2ZXIKICAgIHBzID0gc3ViLmFkZF9wYXJzZXIoInNlcnZlciIsIGhlbHA9IuWQr+WKqOacrOWcsCBoYW5kb2ZmIHNlcnZlcijlvIDlj5HnlKgpIikKICAgIHBzLmFkZF9hcmd1bWVudCgiLS1ob3N0IiwgZGVmYXVsdD0iMC4wLjAuMCIpCiAgICBwcy5hZGRfYXJndW1lbnQoIi0tcG9ydCIsIHR5cGU9aW50LCBkZWZhdWx0PTgwODApCiAgICBwcy5zZXRfZGVmYXVsdHMoZnVuYz1jbWRfc2VydmVyKQoKICAgIGFyZ3MgPSBwLnBhcnNlX2FyZ3MoYXJndikKICAgIHJldHVybiBhcmdzLmZ1bmMoYXJncykKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgc3lzLmV4aXQobWFpbigpKQo=' | base64 -d > "$INSTALL_DIR/handoff.py"
chmod +x "$INSTALL_DIR/handoff.py"

# === 2.5. 写 mcp-server 模块(打包的 tar.gz,失败不致命) ===
if printf '%s' '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' | base64 -d > "$INSTALL_DIR/mcp_src.tar.gz" 2>/dev/null \
   && mkdir -p "$INSTALL_DIR/lib" \
   && tar -xzf "$INSTALL_DIR/mcp_src.tar.gz" -C "$INSTALL_DIR/lib/" 2>/dev/null; then
  echo "  ✓ mcp-server 模块装好"
else
  echo "  ⚠ mcp-server 模块装失败,可重新跑 install 修复"
fi
rm -f "$INSTALL_DIR/mcp_src.tar.gz" 2>/dev/null || true

# === 3. 写 config(供后续调用) ===
cat > "$INSTALL_DIR/config" <<EOF
server_url=$SERVER_URL
installed_at=$(date -Iseconds)
EOF

# === 3.5. 装 Python 依赖(httpx + cryptography) ===
echo "→ 检查 Python 依赖 (httpx, cryptography)..."
if command -v python3 >/dev/null 2>&1; then
  MISSING=()
  python3 -c "import httpx" 2>/dev/null || MISSING+=("httpx")
  python3 -c "import cryptography" 2>/dev/null || MISSING+=("cryptography")
  if [ ${#MISSING[@]} -gt 0 ]; then
    echo "  缺: ${MISSING[*]}  尝试 pip 安装..."
    if python3 -m pip install --user --quiet "${MISSING[@]}" 2>/dev/null        || pip3 install --user --quiet "${MISSING[@]}" 2>/dev/null; then
      echo "  ✓ 已装 ${MISSING[*]}"
    else
      echo "  ⚠ pip 装失败,请手动: pip3 install ${MISSING[*]}"
    fi
  else
    echo "  ✓ 依赖齐全"
  fi
fi

# === 4. 写 thin wrapper(让 PATH 一加就能跑 `handoff`) ===
# 不传 --server-url,handoff.py 会自己从 ~/.handoff/config 读
cat > "$INSTALL_DIR/handoff" <<'WRAP'
#!/usr/bin/env bash
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
exec python3 "$DIR/handoff.py" "$@"
WRAP
chmod +x "$INSTALL_DIR/handoff"

# === 5. 验连通 ===
if command -v curl >/dev/null 2>&1; then
  if curl -fsS --max-time 5 "$SERVER_URL/api/v1/health" >/dev/null 2>&1; then
    echo "✓ server reachable"
  else
    echo "⚠ server 健康检查失败,但 skill 已经装好,稍后手动验证"
  fi
fi

echo ""
echo "============================================================"
echo "✓ agent-handoff skill installed at $INSTALL_DIR"
echo "  server: $SERVER_URL"
echo "  lib   : $INSTALL_DIR/lib/agent_handoff_mcp/ (mcp-server module)"
echo ""
echo "用法:"
echo "  export PATH="\$PATH:$INSTALL_DIR""
echo "  handoff package --messages-json ./msgs.json --hint 'topic'"
echo "  handoff fetch   --handoff-key ah-xxx.yyy --output-dir ./out"
echo "  handoff inspect --handoff-key ah-xxx.yyy"
echo "  handoff --help"
echo ""
echo "如果别的 agent 第一次接入,在它的对话里贴:"
echo '  "请运行 bash -c "$(curl -fsSL '"$SERVER_URL"'/install)" 然后 fetch handoff: ah-..."'
echo "============================================================"
