#!/bin/sh
# Мозг на мак-мини одной командой:
#
#   curl -fsSL https://ai.superpoebat.ru/dev/mac-brain.sh | sh
#
# Скачивает готовый stationd, кладёт его в ~/.station/bin, прописывает в
# автозапуск (launchd) и показывает код сопряжения. Rust, Xcode и git на маке
# не нужны: бинарь собран в CI на таком же arm64.
#
# Карантина Gatekeeper тут не возникает: атрибут вешают браузер и LaunchServices,
# а не curl. Подпись всё равно понадобится — для приложения с доступом к
# микрофону (§16.3), — но мозг звук не пишет, и до неё он живёт так.
set -eu

CHANNEL="${STATION_CHANNEL:-dev}"
HOST="${STATION_HOST:-ai.superpoebat.ru}"
BIN="$HOME/.station/bin"

case "$(uname -sm)" in
  "Darwin arm64") ;;
  *)
    echo "Это установщик мозга для мака на Apple silicon. Здесь: $(uname -sm)" >&2
    exit 1
    ;;
esac

echo "Качаю stationd из канала $CHANNEL…"
mkdir -p "$BIN"
# Во временный файл и потом на место: оборванная закачка не должна оставить
# полубинарь, который launchd будет честно пытаться запускать.
tmp="$(mktemp)"
curl -fsSL "https://$HOST/$CHANNEL/stationd" -o "$tmp"
chmod +x "$tmp"
# Карантин и подпись. Скачанный файл мак помечает как пришедший из сети, а
# подпись у него ломается при замене поверх работающего — тогда служба
# падает с OS_REASON_CODESIGNING, и в логах это выглядит как «просто не
# запускается». Старый файл сначала отвязываем: работающая копия живёт по
# своему inode и переживает обновление.
xattr -c "$tmp" 2>/dev/null || true
codesign -f -s - "$tmp" 2>/dev/null || true
rm -f "$BIN/stationd"
mv "$tmp" "$BIN/stationd"

# Мак-мини как мозг обязан не спать: уснул — узел потерял мозг. Спайк 4 нашёл
# на этой машине sleep=1 минута, и это ломало всё остальное.
if ! pmset -g | grep -qE '^ *sleep +0'; then
  echo "Мак засыпает — для круглосуточного мозга это фатально."
  echo "Выполните, когда будет удобно: sudo pmset -a sleep 0 disksleep 0"
fi

# Компоненты мозга — Node, раннтайм агента, локальные модели — ставит сам
# демон по манифестам: ставить их руками значит повторять это на каждой машине.
"$BIN/stationd" setup || echo "часть компонентов не встала — посмотрите stationd status"

"$BIN/stationd" install

cat <<EOF

Готово. Дальше — один раз:

  $BIN/stationd pair

покажет шестизначный код; введите его на ПК в карточке «Связь с маком».

Журнал: ~/Library/Logs/station.log
Убрать: $BIN/stationd uninstall
EOF
