From 581e1ccad59e7b46aba4ebfc00a75a5360636379 Mon Sep 17 00:00:00 2001 From: Taiga Date: Fri, 5 Jun 2026 07:25:32 +0000 Subject: [PATCH] [2026-06-05] taiga-vault: personal/projects/balda.md --- personal/projects/balda.md | 81 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 personal/projects/balda.md diff --git a/personal/projects/balda.md b/personal/projects/balda.md new file mode 100644 index 00000000..712eebf7 --- /dev/null +++ b/personal/projects/balda.md @@ -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://:8090/zulip/webhook` +4. Скопировать token → `BALDA_ZULIP_WEBHOOK_TOKEN` + +### Авторизация + +После запуска написать боту в DM: +``` +/start owner= +``` + +## Реализованные команды (Telegram parity) + +| Команда | Статус | +|---------|--------| +| `/start owner=` | ✅ | +| `/start invite=` | ✅ | +| `/goal ` / `/goal clear` | ✅ | +| `/topic` | ✅ (создаёт сессию для нового топика) | +| `/user add ` | ✅ | +| `/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` — техническая спецификация