Files
obsidian-vault/work/plans/mattermost-migration.md
T

149 lines
6.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.
---
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 (мигрировать или нет)