simbiot-harness/docs/hardass/INSTALL.md

92 lines
No EOL
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Хардас для клиента студии — инсталлятор (hardass deploy playbook)
Источник: задача t-261002072440-c482ca (голосовое Alex, m-516173358):
«поставить хардас клиентам студии, которые уже сталкиваются с проблемами и
ждут его; агент сам собирает их потребности и постепенно реализует; Alex
дёргать в процессе поменьше».
Реплицируется наша собственная живая установка (`/root/simbiot-harness`,
проверено на этом хосте 2026-10-02): тот же код, те же юниты, тот же ритм.
## Что ставится
| Компонент | Юнит | Что делает |
|---|---|---|
| scheduler | `simbiot-harness.service` | лестница тактов sec/min/hour/day, задачи, дайджесты |
| TG-инбокс | `simbiot-harness-tg.service` | голосовые/сообщения клиента → харнес, ответы, идемпотентная доставка |
| портал-канал | `SIMBIOT_PORTAL_CHAT=1` + `harness/portal_channel.py` | чат клиент ↔ харнес через портал кооператива |
| аудито-ключ | `<root>/.audit/ed25519.key` 0600 | подпись событий и команд (крипто-цепочка) |
## Шаги (у каждого клиента, отдельный root/venv)
1. **Код**: скопировать репозиторий `simbiot-harness/` (rsync/git) на
машину клиента; создать venv: `python3 -m venv venv &&
venv/bin/pip install -q -r requirements.txt` (или установить deps по
импортам: flask, cryptography, requests).
2. **Секреты**: в `<root>/.env`:
- `SIMBIOT_TG_TOKEN` — токен **личного** TG-бота клиента (БотФазер,
у каждого свой — не наш);
- `SIMBIOT_TG_ALLOWED` — TG-ID владельца клиента (его чат, не наш);
- `ROUTER_KEY`, `ROUTER_BASE_URL` — доступ к 9router (или свои ключи
модели, если хочет свой биллинг);
- `SIMBIOT_PORTAL_CHAT=1` + `SIMBIOT_AGENT_NAME=<имя агента на портале>`.
3. **Бот клиента в TG чат**: клиент нажимает «подключить» на портале,
вставляет токен бота — портал хранит его в `agents.tg_bot_token`
(порядок такой же, как у агентов портала, e-«portal channel»).
4. **Юниты systemd**: положить оба unit-файла (шаблоны ниже), ExecStart
с путями клиента, `systemctl daemon-reload && enable --now` обоих.
5. **Инициализация**: `./venv/bin/python cli.py init` → создаёт ES-стор.
6. **Аудит-ключ**: `./venv/bin/python cli.py audit-key` → отпечаток
публичного ключа клиента — записать в реестр установок
(`docs/hardass/INSTALLS.md`), это его `key_id` для сверки «что сделал
харнес».
7. **Проверка**: `./venv/bin/python cli.py verify` → OK; `cli status`;
отправить боту «ping» — ответ приходит в его чат сам.
8. **Онбординг потребностей**: запустить `scripts/needs_survey.py survey`
(см. SURVEY.md) — опросник уходит клиенту в его чат, ответы копятся в
`docs/hardass/needs/`.
## Шаблоны юнитов
```ini
# /etc/systemd/system/simbiot-harness.service
[Unit]
Description=Simbiot Harness (client)
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/root/simbiot-harness
ExecStart=/root/simbiot-harness/venv/bin/python -m harness.scheduler
Restart=always
RestartSec=5
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/simbiot-harness-tg.service
[Unit]
Description=Simbiot Harness TG inbox (client)
After=network-online.target simbiot-harness.service
[Service]
Type=simple
WorkingDirectory=/root/simbiot-harness
ExecStart=/root/simbiot-harness/venv/bin/python -m harness.tg_inbox
Restart=always
RestartSec=5
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
```
## Смоук-проверка инсталлятора (сделано 2026-10-02)
Бута свежей копии на этом хосте с разделёнными `SIMBIOT_DB` и
`SIMBIOT_AUDIT_KEY_DIR`: init → verify OK (подписи и цепочка валидны,
ключ клиента отличается от нашего — своя крипто-граница). Параллельный
рестарт двух демонов безопасен (init_db идемпотентен, race закрыт
t-261002072440).
## Реестр установок — docs/hardass/INSTALLS.md
Каждая установка: клиент, машина, дата, key_id (audit-key), TG-бот,
статус, потребности (ссылка на needs/<client>).