[2026-06-05] taiga-vault: personal/projects/balda.md
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
# Balda (Валера) — AI Worker Bot
|
||||
|
||||
Аналог Hermes. Go-сервис: берёт задачи из чата (Telegram или Zulip), запускает AI CLI и отвечает.
|
||||
|
||||
## Репо
|
||||
|
||||
- Upstream: https://github.com/normahq/balda
|
||||
- Fork: https://github.com/mallexxx/balda
|
||||
- Local: ~/Developer/balda
|
||||
- Ветка: `feat/zulip-transport`
|
||||
|
||||
## Архитектура
|
||||
|
||||
- NATS JetStream — event bus (embedded)
|
||||
- SQLite — состояние (owner, sessions, tasks)
|
||||
- Telegram — через polling или webhook
|
||||
- Zulip — через outgoing webhook bot
|
||||
- Providers: codex, opencode, copilot, gemini, claude (ACP protocol)
|
||||
|
||||
## Zulip Integration
|
||||
|
||||
Полностью реализована. Webhook-based (не polling).
|
||||
Тип бота: **Outgoing webhook** (не Generic bot).
|
||||
|
||||
### Credentials (zulip.qentra.top)
|
||||
|
||||
- Bot email: `balda-bot@zulip.qentra.top`
|
||||
- API key: `AtC9FypdIl6F0hNICW0lcOzehrVrWhPr`
|
||||
- Server URL: `https://zulip.qentra.top`
|
||||
- Webhook token: берётся из Settings → Bots → balda-bot → Edit → Token
|
||||
|
||||
### Config (env vars)
|
||||
|
||||
```
|
||||
BALDA_ZULIP_BOT_EMAIL=balda-bot@zulip.qentra.top
|
||||
BALDA_ZULIP_API_KEY=AtC9FypdIl6F0hNICW0lcOzehrVrWhPr
|
||||
BALDA_ZULIP_SERVER_URL=https://zulip.qentra.top
|
||||
BALDA_ZULIP_WEBHOOK_TOKEN=<из настроек бота>
|
||||
BALDA_ZULIP_WEBHOOK_ENABLED=true
|
||||
```
|
||||
|
||||
### Webhook setup в Zulip
|
||||
|
||||
1. Settings → Bots → balda-bot → Edit
|
||||
2. Bot type: Outgoing webhook
|
||||
3. Endpoint URL: `http://<host>:8090/zulip/webhook`
|
||||
4. Скопировать token → `BALDA_ZULIP_WEBHOOK_TOKEN`
|
||||
|
||||
### Авторизация
|
||||
|
||||
После запуска написать боту в DM:
|
||||
```
|
||||
/start owner=<BALDA_AUTH_TOKEN>
|
||||
```
|
||||
|
||||
## Реализованные команды (Telegram parity)
|
||||
|
||||
| Команда | Статус |
|
||||
|---------|--------|
|
||||
| `/start owner=<token>` | ✅ |
|
||||
| `/start invite=<token>` | ✅ |
|
||||
| `/goal <objective>` / `/goal clear` | ✅ |
|
||||
| `/topic` | ✅ (создаёт сессию для нового топика) |
|
||||
| `/user add <email>` | ✅ |
|
||||
| `/user list` | ✅ (с инвайтами + expiry) |
|
||||
| Typing indicator | ✅ (isDM-aware: true в DM, false в стримах) |
|
||||
| plan_updates / SendDraftPlain | ➖ no-op (нет аналога в Zulip) |
|
||||
|
||||
## Upcoming: mention-based thread takeover
|
||||
|
||||
Когда `@balda-bot` упоминается в топике без активной сессии — бот автоматически берёт топик под контроль.
|
||||
|
||||
Механизм (аналог whale-thread-guard в Hermes):
|
||||
- Webhook payload поле `trigger == "mention"` → auto-create session
|
||||
- `allowed_owners` список в конфиге: Zulip email без токена
|
||||
- После захвата топик отвечает на все сообщения (обычная сессия)
|
||||
|
||||
## Docs
|
||||
|
||||
- `docs/zulip-webhook.md` — полное руководство по настройке
|
||||
- `docs/balda.md` — техническая спецификация
|
||||
Reference in New Issue
Block a user