diff --git a/README.md b/README.md index 198bdf5..a09cee9 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,9 @@ cd claude-panel - `http://127.0.0.1:8766/raw` — что панель видит: логи хука, причины скрытия сессий, ошибки лимитов и баланса; - `~/Library/Logs/claude-agents/panel.log` — лог службы; -- `launchctl print gui/$(id -u)/com.andrey.claude-agents` — состояние службы. +- `launchctl print gui/$(id -u)/com.andrey.claude-agents` — состояние службы; ошибки запуска (например, «не найден python») видны только здесь, а не в `panel.log`; +- после переустановки или обновления Python (в том числе `brew upgrade`/`brew cleanup`) запустите + `./install.sh` заново — служба хранит путь к `python3`, и без этого launchd не сможет её запустить. ## Удаление diff --git a/install.sh b/install.sh index 29f8868..f01e2dd 100755 --- a/install.sh +++ b/install.sh @@ -11,7 +11,7 @@ die() { printf '\033[31mОшибка:\033[0m %s\n' "$*" >&2; exit 1; } # из SSH-сессии launchd (gui/) и iTerm2 не настроить, а прежний сервер уже был бы остановлен [ -z "${SSH_CONNECTION:-}${SSH_TTY:-}" ] \ - || die "запустите за самим Mac, не по SSH — из SSH-сессии launchd и iTerm2 не настроить" + || die "запустите за самим Mac, не по SSH — из SSH-сессии launchd и iTerm2 не настроить. Если вы и так за Mac (например, в панели tmux, открытой раньше из SSH), запустите в обычной вкладке iTerm2 или после unset SSH_CONNECTION SSH_TTY" HERE="$(cd "$(dirname "$0")" && pwd)" FILES="$HERE/files" @@ -34,7 +34,7 @@ say "Проверяю окружение" [ "$(uname)" = "Darwin" ] || [ "${CLAUDE_PANEL_ANY_OS:-}" = 1 ] || die "нужен macOS с iTerm2" python3 -c 'import sys; assert sys.version_info >= (3, 8)' 2>/dev/null \ || die "нужен python3 ≥ 3.8 (xcode-select --install или brew install python)" -PY="$(python3 -c 'import sys; print(sys.executable)')" +PY="$(command -v python3)" # не sys.executable: версионный путь Homebrew исчезает после brew cleanup ok "python3: $(python3 -V 2>&1) ($PY)" if command -v jq >/dev/null; then ok "jq: $(command -v jq)" else warn "нет jq — хук без него молча ничего не пишет. Установите: brew install jq"; fi @@ -81,7 +81,12 @@ if command -v lsof >/dev/null; then pids=$(lsof -ti "tcp:$PORT" -sTCP:LISTEN 2>/dev/null || true) if [ -n "$pids" ]; then kill $pids 2>/dev/null || true; sleep 1; ok "остановлена прежняя версия панели"; fi fi -launchctl bootstrap "$GUI" "$PLIST" || die "launchd не принял службу — смотрите $SERVICE_LOG" +# сразу после bootout bootstrap иногда падает с «Input/output error» — повторяем +for attempt in 1 2 3 4 5; do + launchctl bootstrap "$GUI" "$PLIST" && break + [ "$attempt" = 5 ] && die "launchd не принял службу — смотрите launchctl print $GUI/$LABEL и $SERVICE_LOG" + sleep 1 +done up=0 for _ in 1 2 3 4 5 6 7 8 9 10; do if curl -s -o /dev/null --max-time 1 "http://127.0.0.1:$PORT/"; then up=1; break; fi @@ -108,6 +113,7 @@ else fi if [ $iterm_running = 1 ] && [ "$api" = 1 ]; then + pkill -f "Scripts/AutoLaunch/claude_agents.py" || true # прежний регистратор, иначе их станет по одному на запуск if osascript -e 'tell application "iTerm2" to launch API script named "claude_agents"' >/dev/null 2>&1; then ok "панель зарегистрирована в Toolbelt" else diff --git a/uninstall.sh b/uninstall.sh index 5753a75..cf722fb 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -6,7 +6,7 @@ ok() { printf ' \033[32m✓\033[0m %s\n' "$*"; } die() { printf '\033[31mОшибка:\033[0m %s\n' "$*" >&2; exit 1; } [ -z "${SSH_CONNECTION:-}${SSH_TTY:-}" ] \ - || die "запустите за самим Mac, не по SSH — из SSH-сессии launchd и iTerm2 не настроить" + || die "запустите за самим Mac, не по SSH — из SSH-сессии launchd и iTerm2 не настроить. Если вы и так за Mac (например, в панели tmux, открытой раньше из SSH), запустите в обычной вкладке iTerm2 или после unset SSH_CONNECTION SSH_TTY" HERE="$(cd "$(dirname "$0")" && pwd)" AUTOLAUNCH="$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch"