---
name: start-dev-on-host
description: Запускает локальную разработку web-fps на хосте после проверки Node (>= v23.7.0) и Go (>= 1.23.12), затем Vite и API-скрипт. Use when the user asks to start local development, run the dev stack, or in Russian запусти проект для локальной разработки, запусти дев-сервер, подними клиент и сервер.
---

# Локальная разработка на хосте (web-fps)

## Когда применять

Пользователь хочет поднять стек для разработки на своём компьютере (не в Docker), в том числе фразами на русском: «запусти проект для локальной разработки», «запусти дев», «клиент и сервер».

## Корень репозитория

Все пути ниже относительно корня репозитория `web-fps` (где лежат `client/` и `server/`).

## Проверка окружения на хосте

Перед `npm install` / запуском сервисов выполнить проверки. При несоответствии **не** запускать стек; кратко сообщить пользователю фактическую версию и минимально требуемую.

### Node.js (через `node`, npm идёт в комплекте)

- Минимум: **v23.7.0** (semver `23.7.0`).
- Команда: `node --version` (ожидаемый формат `vMAJOR.MINOR.PATCH`).
- Сравнение: построчно по числам MAJOR, MINOR, PATCH; текущая версия должна быть **≥** 23.7.0.

Быстрая проверка в одну команду (код выхода 0 — ок, иначе слишком старая версия):

```bash
node -e 'const req=[23,7,0];const p=process.version.slice(1).split(".").map(Number);for(let i=0;i<3;i++){const a=p[i]||0,b=req[i]||0;if(a>b)process.exit(0);if(a<b)process.exit(1);}process.exit(0);'
```

Дополнительно убедиться, что `npm` доступен: `command -v npm` (или `npm --version`).

### Go

- Минимум: **1.23.12**.
- Команда: `go version` (типичный вывод: `go version go1.23.12 darwin/arm64`).
- Извлечь из строки токен вида `go1.MM.mm` или `go1.MM.mpp`, убрать префикс `go`, сравнить semver с **≥** 1.23.12.

Быстрая проверка (код выхода 0 — ок; нужен `sort -V`, как в GNU coreutils и в современном macOS):

```bash
v=$(go version | grep -oE 'go[0-9]+\.[0-9]+(\.[0-9]+)?' | head -1 | sed 's/^go//')
[ -z "$v" ] && exit 1
# Минимальная допустимая версия в сравнении:
min=1.23.12
# Если первая строка после sort -V — min, значит текущая >= min
[ "$(printf '%s\n' "$min" "$v" | sort -V | head -n1)" = "$min" ]
```

Если `sort -V` недоступен, сравнить версию из `go version` с **1.23.12** вручную по semver.

## Команды (два процесса)

1. **API (Go)** — один раз из корня репозитория:

   ```bash
   ./server/sh/start-server.sh
   ```

   Скрипт собирает `go build -o bin/api ./cmd/api` в каталоге `server/`, поднимает процесс в фоне, пишет PID в `server/bin/server.pid`, логи в `server/logs/server.log`.

2. **Клиент (Vite)** — отдельный терминал, из корня:

   ```bash
   cd client && npm run dev
   ```

   Оставить работающим (foreground). Останавливать по Ctrl+C.

## Порядок для агента

- Выполнить **Проверку окружения на хосте**: Node ≥ v23.7.0, Go ≥ 1.23.12, наличие `npm`. При провале — остановиться.
- Убедиться, что зависимости клиента установлены: при необходимости один раз `cd client && npm install`.
- Сначала выполнить `./server/sh/start-server.sh` (если скрипт не исполняемый — `chmod +x server/sh/start-server.sh`).
- Затем запустить `cd client && npm run dev` во **втором** процессе/терминале (или в фоне с `block_until_ms: 0`, если среда это поддерживает).
- Если порт занят или сборка Go падает — смотреть `server/logs/server.log` и вывод терминала.

## Требования (зафиксированные минимумы)

- **Node.js** ≥ **v23.7.0** и **npm** для `client`.
- **Go** ≥ **1.23.12** для сборки API в `server/`.

## Не путать

- Это **не** production-сборка: `npm run dev` — режим разработки Vite.
- Остановка API: по PID из `server/bin/server.pid` (например `kill $(cat server/bin/server.pid)`) или перезапуск после правок бэкенда по необходимости.
