[2026-06-18] taiga-vault: personal/projects/zulip-router-approval-reactions.md
This commit is contained in:
@@ -204,6 +204,36 @@ func (z *ZulipClient) addReaction(messageID int64, emojiName, emojiCode string)
|
||||
}
|
||||
```
|
||||
|
||||
## Баги Hermes webhook
|
||||
|
||||
### Баг 1: Сообщения дропаются если был approval interrupt
|
||||
|
||||
Если агент запросил approval и ты ответил (даже не /approve, а любое сообщение), все сообщения которые были до ответа на approval — теряются. Агент их не получает.
|
||||
|
||||
**Воспроизведение:**
|
||||
1. Агент шлёт approval request
|
||||
2. Ты продолжаешь писать другие сообщения в треде
|
||||
3. Ты отвечаешь на approval
|
||||
4. Агент получает только approval-ответ, всё что было между — дропнуто
|
||||
|
||||
**Root cause:** `interrupt_gateway_approvals()` + `interrupt()` в `_route_to_active_session()` сбрасывает сообщения агента и восстанавливает стейт на момент approval. Промежуточные сообщения (между approval и ответом) не вшиты в этот стейт.
|
||||
|
||||
**Фикс:** ? (Пока не чинили)
|
||||
|
||||
### Баг 2: Стриминг не работает
|
||||
|
||||
Hermes не стримит ответ через webhook — агент отвечает одним блоком после завершения генерации. Пользователь не видит процесс печати.
|
||||
|
||||
**Root cause:** Webhook-транспорт не поддерживает стриминг — ответ формируется целиком и шлётся одним POST-запросом в Zulip через роутер.
|
||||
|
||||
**Фикс:** ? (Пока не чинили)
|
||||
|
||||
### Баг 3 (Phase 2): Seed реакций не срабатывал из-за skip_bot_messages
|
||||
|
||||
`isApprovalMessage` и `seedApprovalReactions` в коде Phase 2 стояли ПОСЛЕ guard-а `if senderIsBot && cfg.SkipBotMessages`. Approval-сообщения шлются от бота → `SkipBotMessages = true` → processEvent выходил раньше, чем seed ставился.
|
||||
|
||||
**Фикс 18.06.2026:** Перенёс seed-логику ДО guard'а `SkipBotMessages` — seedApprovalReactions вызывается сразу после определения senderIsBot, до любой фильтрации.
|
||||
|
||||
## Изменения в Hermes (для `/approve` текстом)
|
||||
|
||||
### run.py — _route_to_active_session
|
||||
@@ -250,7 +280,7 @@ Hermes **не отправляет пользователю нотификаци
|
||||
### Phase 1b: `/reset` (✅ проверено 18.06.2026)
|
||||
- [x] `/reset` — сбрасывает контекст. Проверено 18.06.2026.
|
||||
|
||||
#### Phase 2: Реакции через роутер — реализация
|
||||
### Phase 2: Реакции через роутер — реализация
|
||||
- [x] Добавить reaction-поля в `ZulipEvent` (config.go)
|
||||
- [x] Добавить `"reaction"` в event_types и обработку в main.go
|
||||
- [x] Создать MessageOwnerStore в ownership.go
|
||||
@@ -258,9 +288,10 @@ Hermes **не отправляет пользователю нотификаци
|
||||
- [x] Реализовать обработчик реакции: emoji → choice → Forward
|
||||
- [x] Pre-seed реакций на approval-сообщения
|
||||
- [x] Собрать и перезапустить роутер
|
||||
- [x] Починить seed — перенести ДО `skip_bot_messages` guard'а (seed ставился после выхода)
|
||||
- [ ] ✅ Образ пересобран с фиксом, контейнер **не перезапущен** (ждёт аппрува)
|
||||
- [ ] Проверить что seed-реакции ставятся на approval-сообщения
|
||||
- [ ] Проверить что реакция 👎 форвардит choice="approve:deny" назад в Hermes
|
||||
- [ ] Проверить что POST с trigger="approve:once" правильно обрабатывается Hermes
|
||||
- [ ] Добавить обработку reaction в `processEvent`
|
||||
- [ ] Реализовать message_id → bot_name маппинг
|
||||
- [ ] Добавить `addReaction` в zulip.go
|
||||
- [ ] Добавить pre-seed реакций на approval-сообщения
|
||||
- [ ] Проверить что POST с trigger="approve:once" правильно обрабатывается Hermes
|
||||
- [ ] Закоммитить изменения в git
|
||||
- [ ] Обновить доку окончательно
|
||||
|
||||
Reference in New Issue
Block a user