149 lines
6.2 KiB
Markdown
149 lines
6.2 KiB
Markdown
---
|
||
tags:
|
||
- mattermost
|
||
- migration
|
||
- plan
|
||
- personal-os
|
||
created: '2026-05-14'
|
||
status: in-progress
|
||
---
|
||
# Plan: Mattermost Migration
|
||
|
||
**Контекст**: Корпоративная политика требует перехода на corporate-hosted Mattermost.
|
||
Zulip остаётся (апгрейд отменяется), но работа переезжает в MM.
|
||
Personal/family/journal остаются в Discord и Zulip соответственно.
|
||
|
||
**Источник**: [Zulip тред «✔ Zulip migration ⭐»](https://zulip.qentra.top/#narrow/stream/4-master/topic/.E2.9C.94.20Zulip.20migration.20.E2.AD.90/near/15190)
|
||
|
||
---
|
||
|
||
## Scope
|
||
|
||
| Пространство | Платформа |
|
||
|---|---|
|
||
| **Work** (Personal OS) | **Mattermost** |
|
||
| Personal | Discord (без изменений) |
|
||
| Family, journal | Zulip / Discord (без изменений) |
|
||
|
||
---
|
||
|
||
## Архитектура ботов
|
||
|
||
Проблема: сейчас executor-воркеры постят от имени Eagle → смешивает интерактив с автономной работой.
|
||
Решение: отдельные bot-аккаунты с разными identity.
|
||
|
||
| Bot | Роль | Аватар |
|
||
|---|---|---|
|
||
| **Орёл** (Eagle) 🦅 | Персональный ассистент, интерактив, планирование | 🦅 |
|
||
| **Executor** ⚡ | Автономные воркеры, code fixes, PR-отчёты | ⚡ |
|
||
| **Dax** | Scheduled: daily brief, inbox triage, weekly review (переиспользуем корпоративный бот) | — |
|
||
|
||
Eagle и Executor = новые MM bot accounts. Dax = переиспользуем существующий.
|
||
|
||
---
|
||
|
||
## Структура каналов (Categories → Channels)
|
||
|
||
```
|
||
📁 Personal OS
|
||
# general ← Eagle интерактив
|
||
# daily-brief ← Dax
|
||
# inbox ← Dax (inbox triage)
|
||
# focus ← статус фокуса
|
||
|
||
📁 Executor
|
||
# queue ← задачи в очереди, статусы
|
||
# worker-1 ← лог активного воркера 1
|
||
# worker-2 ← лог активного воркера 2
|
||
```
|
||
|
||
---
|
||
|
||
## Задачи
|
||
|
||
### 🔴 IT Ops (блокирующая)
|
||
|
||
**Asana задача**: [#1214799615211686](https://app.asana.com/0/0/1214799615211686)
|
||
|
||
**Задача для IT/Admin**: создать bot accounts в корпоративном MM.
|
||
|
||
Нужные боты:
|
||
- `eagle-bot` — персональный ассистент (Eagle / Орёл)
|
||
- `executor-bot` — автономные воркеры
|
||
- `brief-bot` — scheduled доставка брифов. **Кандидат на замену: Dax bot** (корпоративный бот, уже постит GitHub-ивенты → токен вероятно доступен). Если переиспользуем Dax — `brief-bot` создавать не нужно, брифы будут приходить от Dax.
|
||
|
||
**Для каждого бота нужны**:
|
||
- Bot Account (не incoming webhook — нужен постоянный токен и avatar)
|
||
- Токен → передать Алексу для `~/.hermes/.env`
|
||
- Права: читать/писать в каналах Personal OS и Executor
|
||
|
||
**Как проверить текущий доступ**:
|
||
- В корпоративном MM: **☰ Main Menu → Integrations**
|
||
- Если пункт есть → можно создавать самому
|
||
- Если нет → запросить у MM Admin
|
||
|
||
---
|
||
|
||
### Технический план (после получения токенов)
|
||
|
||
**1. Выбор архитектуры**
|
||
|
||
| Подход | Когда использовать |
|
||
|---|---|
|
||
| Hermes gateway (MM адаптер) | Если нужен интерактивный Eagle (отвечает на сообщения в MM real-time) |
|
||
| cron/scripts/prompt files | Только scheduled delivery (brief, inbox, executor-отчёты) |
|
||
|
||
Hermes уже имеет `gateway/platforms/mattermost.py` — WebSocket listener + REST API v4.
|
||
Config: `MATTERMOST_URL`, `MATTERMOST_TOKEN`, `MATTERMOST_HOME_CHANNEL`.
|
||
|
||
**2. Конфигурация `.env`**
|
||
|
||
```bash
|
||
# Mattermost
|
||
MATTERMOST_URL=https://mattermost.company.com
|
||
MATTERMOST_EAGLE_TOKEN=<eagle-bot token>
|
||
MATTERMOST_EXECUTOR_TOKEN=<executor-bot token>
|
||
MATTERMOST_DAX_TOKEN=<dax token>
|
||
MATTERMOST_TEAM_ID=<team id>
|
||
# Channel IDs (узнать после настройки каналов)
|
||
MM_CHANNEL_GENERAL=<id>
|
||
MM_CHANNEL_DAILY_BRIEF=<id>
|
||
MM_CHANNEL_INBOX=<id>
|
||
MM_CHANNEL_EXECUTOR_QUEUE=<id>
|
||
```
|
||
|
||
**3. Scheduled delivery (Eagle ← scripts)**
|
||
|
||
Для брифов и inbox triage — чистые скрипты, никакого daemon-а:
|
||
```bash
|
||
hermes --quiet --once "$(cat ~/agent/prompts/daily-brief.md)" \
|
||
| curl -s -X POST "$MATTERMOST_URL/api/v4/posts" \
|
||
-H "Authorization: Bearer $MATTERMOST_BRIEF_TOKEN" \
|
||
-d "{\"channel_id\": \"$MM_CHANNEL_DAILY_BRIEF\", \"message\": \"...\"}"
|
||
```
|
||
|
||
**4. Интерактивный Eagle**
|
||
|
||
Опция A: `hermes gateway start` с MM адаптером (+ `MATTERMOST_TOKEN=<eagle token>`)
|
||
Опция B: ~200 строк `aiohttp` WebSocket демон (самодостаточно, без Hermes)
|
||
|
||
**5. История Zulip (опционально)**
|
||
|
||
Прямого инструмента Zulip→MM нет. Варианты:
|
||
- Написать конвертер: Zulip JSON export → MM bulk import JSONL
|
||
- Кодировать Topics как префикс сообщения: `**[topic]** текст`
|
||
- Или просто начать с чистого листа (если история некритична)
|
||
|
||
---
|
||
|
||
## Статус
|
||
|
||
- [ ] **IT Ops**: проверить доступ к MM Integrations → запросить создание ботов
|
||
- [ ] Получить токены для eagle-bot, executor-bot, brief-bot
|
||
- [ ] Создать категории + каналы в MM
|
||
- [ ] Настроить `.env` с токенами
|
||
- [ ] Выбрать архитектуру (Hermes vs custom scripts)
|
||
- [ ] Подключить scheduled delivery (brief, inbox, executor)
|
||
- [ ] Подключить интерактивного Eagle
|
||
- [ ] Решить вопрос с историей Zulip (мигрировать или нет)
|