simbiot-harness/docs/migration-hermes.md
simbiot b780c9ba9e feat(migration): полный ингест истории Гермеса в стандартную миграцию (--apply, шаг 6.5)
- tools/hermes_history_ingest.py: параметры --hermes-db/--rag-db/--prefix/--cutoff/--sessions-cards; rag.DB перекрывается атрибутом (вендор фиксирует при импорте); cutoff='' = вся история
- scripts/migrate_hermes.py: --history-full по умолчанию ON в --apply (rag_index → ingest), --no-history-full / --history-agent <имя> для префикса
- docs/migration-hermes.md: раздел 6.5
- e2e: полный apply на смоук-базе — +350 чанков / 75 файлов за 24с, history_full.ok=true
2026-10-04 13:12:54 +00:00

82 lines
6 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.

# Миграция Гермес → Simbiot
Скрипт: `scripts/migrate_hermes.py` (t-261001124130). Переносит память, историю
диалогов и настройки агента с харнеса Гермес (Nous Research) на Simbiot, чтобы
после установки Simbiot агент отвечал с учётом прежних знаний.
## Что читает из каталога Гермеса (`~/.hermes` или `~hermes_user/.hermes`)
| Источник | Данные | Куда в Simbiot |
|---|---|---|
| `memories/MEMORY.md` | §-факты памяти | `OUT/memory/MEMORY.md`, RAG, `policy.identity` |
| `memories/USER.md` | профиль пользователя | `OUT/memory/USER.md`, RAG, `policy.identity` |
| `SOUL.md` | персона агента | `OUT/identity.md`, `policy.identity` |
| `state.db` (sessions/messages, active) | история диалогов | `OUT/history/*.md` + индекс, RAG |
| `config.yaml` | настройки | `OUT/config-hermes.yaml` (секреты → `<REDACTED>`), маппинг `model` → `SIMBIOT_MODEL` в отчёте |
| `cron/jobs.json` | фоновые джобы | `OUT/cron-map.json` (эквиваленты: задачи на доске / systemd timer) |
## Запуск
```bash
# dry-run (по умолчанию): только карта источников и превью, ничего не пишет
python3 scripts/migrate_hermes.py --hermes /home/hermes/.hermes
# apply + запись персона/памяти в стор ЭТОГО инстанса Simbiot + RAG-индексация:
python3 scripts/migrate_hermes.py --hermes /home/hermes/.hermes --apply \
--harness-dir /root/simbiot-harness --rag-db /root/rag/rag.db
```
Опции: `--out DIR` (пакет, дефолт `hermes-migration/` в репо),
`--rag-py`/`--rag-script` (вендор RAG: `/root/rag-venv/bin/python` +
`/root/rag/rag.py`), `--rag-db PATH` (если не задан — RAG-шаг пропускается).
## Что происходит при `--apply`
1. `OUT/identity.md` — персона+память; в стор целевого инстанса пишется
`PolicyChanged` с `policy_hermes_marker` (sha-хеш текста) — **идемпотентно**:
повторный прогон со тем же текстом — `skip-duplicate`.
2. `OUT/history/*.md` — последние ≤40 сессий с реальным диалогом (≥2 сообщений,
active=1; крон-сессии только в остаток после живых чатов), кап
40 сообщений/сессия, 150 всего; секреты (`sk-…`, `agt_…`, `<digits>:<токен>`,
`ghp_…`) замаскированы.
3. RAG-индексация: `.md`-файлы пакета → целевая база (вендор дедупит по sha).
4. `OUT/report.json` — полный отчёт: counts, mapping, events, rag, errors.
### 6.5) Полный ингест истории (с 04.10.2026, голосовое Alex m-261004)
`--apply` по умолчанию запускает `tools/hermes_history_ingest.py` поверх
**всех** сессий `state.db` Гермеса: помесячные роллапы + карточки человеческих
диалогов → та же RAG-база (префикс `hermes-history/…`). Флаги:
`--no-history-full` (отключить), `--history-agent <имя>` (префикс
`hermes-history/<имя>` — для нескольких агентов в одной базе). Ингест
идемпотентен (DELETE+INSERT по префиксу), запуск — `--rag-py` вендора
(fastembed). Проверено e2e: +350 чанков / 75 файлов за 24с на 70 сессиях.
`.env` целевого инстанса не трогается скриптом: `ROUTER_KEY`/`SIMBIOT_AGENT_NAME`
и портал-канал (`/etc/coop-reporter.env`: `PORTAL_URL` + `AGENT_TOKEN` agt_…)
настраиваются при установке (scripts/install.sh, визард).
## Реальный кейс: агент Рита (22.10.2026, 22:19 UTC)
Хост `hermes-rita` (2.28.125.152), источник `/home/hermes/.hermes`
(135МБ state.db, 936 сессий, 11276 сообщений), портальная БД: agents.id=42
переведён `harness_type='simbiot'`, `portal_channel=1`, agt-токен репортера
выпущен, router-ключ Риты из `router_keys` записан в её `.env`.
Результат: 31 файл проиндексирован в RAG (/root/rag/rag.db, 0 ошибок),
`PolicyChanged applied` (marker `policy-hermes-6c9beed932`, identity 5910
символов). E2E-проверка: сообщение в канал портала → мин-тик Риты забрал,
ответ содержит факты ИЗ ПЕРЕНЕСЁННОЙ памяти (видеостек OpenMontage, Edge-TTS
ru-RU-DmitryNeural) — агент отвечает с учётом истории.
## Ограничения / follow-up
- 10 cron-джобов Гермеса перенесены как карта (`cron-map.json`), не как живые
таймеры: включать селективно (watchdog-пинги и протухшие пуллы не переносить) —
задача на доске (follow-up t-… по кронам Риты).
- Полная история (все 936 сессий остаётся в `state.db` Гермеса) не копируется —
только активное диалоговое ядро; исходник сохраняется нетронутым.
- TG-бот нового агента подключается кнопкой на портале (`/set-tg-bot`) — флоу
тот же, что для остальных агентов Simbiot.
03.10.2026 — дополнение: SIMBIOT_TG_TOKEN Риты перенесён из её Hermes-.env
(bot @rita_a_bot), её simbiot-harness active.