[2026-10-14] eagle: personal/projects/archive/balda-reference-before-2026-10-14.md personal/projects/balda/balda.md personal/projects/balda/execution-broker.md personal/projects/balda/setup.md personal/projects/balda/soul.md personal/projects/balda/workspace-context.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-14 20:40:18 +06:00
1 parent e67a7c67e0
commit f76558d6d3
6 files changed
+372 -255

No files matched your search

+26 -101
View File
@@ -1,115 +1,40 @@
# Balda (Валера) — AI Worker Bot
# Balda — актуальный обзор
> **Актуальный статус — 2026-10-03.** Mattermost-интеграция PR #8 уже в upstream. [PR #12](https://github.com/baldaworks/balda/pull/12) по маршрутизации webhook открыт на `73e02156`: 8/8 GitHub checks прошли; повторное ревью после исправления запрошенных изменений ещё ожидается. Balda запущена из чистого текущего HEAD PR `73e02156`, и хеш бинарника в контейнере совпадает с собранным артефактом. Ревьюер запросил изменения в PR #12 из-за 404 при временном сбое lookup session. Исправление `73e02156` уже отправлено: теперь ответ 503, добавлен HTTP-тест; локальные race tests и lint прошли, все 8 checks нового HEAD прошли. До повторного сквозного прогона merge/release — NO-GO. Прежний вывод о другом SHA был ошибкой: `d094943b` относился к внешнему репозиторию Broker, а `deepseekfix` был старой меткой образа. Локальных правок кода Balda в текущем бинарнике нет; новый сквозной прогон ещё нужен. Приёмочный Broker run `run-fbe2cb459fe2965554402aba1bd5fcd0` прошёл; Mattermost отправил апрув и финал в исходный тред. Результат `4dafb9d` был доставлен в `go-cli-test` вручную через Broker API: Balda пропустила автоматическую публикацию. Broker теперь сам проверяет commit/quality/bundle без обязательного SHA от Balda; webhook и плагин rc.19 требуют публикацию до закрытия Story. Новый end-to-end прогон ещё не проведён. Общий release — NO-GO. Детали и текущие проверки: [[personal/plans/balda-callee-prism-plan]]. Ниже сохранена историческая документация; старые статусы PR и конфигурации не являются текущими.
Проверено: **2026-10-14**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **Mac, Mattermost, Codex ACP**, контейнер `balda-mm-mac`.
Аналог Hermes. Go-сервис: берёт задачи из чата (Telegram или Zulip), запускает AI CLI и отвечает.
## Источники текущего состояния
## Репо
- [[personal/projects/balda/setup|Работающий контейнер, конфигурация, MCP и перезапуск]]
- [[personal/projects/balda/execution-broker|Broker/Balda: проверенные версии, артефакты и незавершённая работа]]
- [[personal/projects/balda/soul|Снимок global instruction]]
- [[personal/projects/balda/workspace-context|Provider context]]
- Upstream: https://github.com/baldaworks/balda (старое имя `normahq/balda` — редирект)
- Fork: https://github.com/mallexxx/balda
- Local: ~/Developer/balda
- Ветка: `feat/mattermost-channel` (PR [#8](https://github.com/baldaworks/balda/pull/8), OPEN, 8/8 CI, MERGEABLE)
Эти карточки различают проверенный код, результаты CI и реально развёрнутый образ. Готовность Broker не следует из открытия PR Balda.
### 🔴 Два репозитория — не путать
## Репозитории и PR
| Репо | Что там | PR |
|---|---|---|
| **`baldaworks/balda`** | сам бот, транспорты (Mattermost, Zulip) | [#8](https://github.com/baldaworks/balda/pull/8) Mattermost, OPEN · [#1](https://github.com/baldaworks/balda/pull/1) Zulip, merged |
| **`normahq/runtime`** | библиотека рантайма (`agentfactory`, `hostedagent`) | [#5](https://github.com/normahq/runtime/pull/5) фикс MCP-тулинга, OPEN · **`CHANGES_REQUESTED`** (3 дефекта, план — [[personal/plans/runtime-pr5-toolset-dedup-review-fixes]]) · [#4](https://github.com/normahq/runtime/pull/4) OpenAI tool_calls, OPEN (4 дефекта закрыты, [[personal/plans/runtime-pr4-openai-toolcalls-fixes]]) |
| Репозиторий / изменение | Подтверждённый статус |
| --- | --- |
| [baldaworks/balda](https://github.com/baldaworks/balda) | Upstream бота; fork — [mallexxx/balda](https://github.com/mallexxx/balda) |
| [PR #8 — Mattermost](https://github.com/baldaworks/balda/pull/8) | **MERGED**, 2026-09-29 |
| [PR #12 — webhook routing](https://github.com/baldaworks/balda/pull/12) | **MERGED**, 2026-10-03 |
| [PR #52 — durable ingress/question recovery](https://github.com/baldaworks/balda/pull/52) | **OPEN**, HEAD `085a0d43`; **11/11 CI SUCCESS**, не draft, mergeable, ещё не merged |
Форки: `mallexxx/balda`, `mallexxx/runtime` — **разные**, клоны тоже разные.
Детали по runtime-PR → [[personal/projects/balda/balda-valera]].
Checkout кандидата PR #52: `/private/tmp/execution-broker-balda-upstream`, ветка `codex/ingress-outbox-v2`. Локальные проверки и self-review завершены. CI включает восемь required jobs и три native-launch jobs (Ubuntu/macOS/Windows). Зелёный CI не означает, что кандидат установлен: production image остаётся `balda-balda`, его точный ID указан в runbook.
⚠️ **PR из форка: CI не запускается сам.** GitHub требует ручного подтверждения workflows
владельцем репо («Approve and run workflows») → `mergeStateStatus: UNSTABLE` при
`check-runs: total_count 0`. Это не поломка PR.
PR #52 добавляет durable admission и автономное восстановление SQL-сохранённого ответа без повторного Telegram update, затем независимую очистку controls. Включены retention, opt-in NATS budgets и regression tests. Операционные ограничения и миграции SQLite 63 / PostgreSQL 28 описаны в карточке Broker.
## Архитектура
## Конфигурация и владение
- NATS JetStream — event bus (embedded)
- SQLite — состояние (owner, sessions, tasks)
- Telegram — через polling или webhook
- Zulip — через outgoing webhook bot
- Providers: codex, opencode, copilot, gemini, claude (ACP protocol)
Действующий конфиг: `/Users/admin/Docker/balda-mm-mac/config/config.yaml`. Dev-конфиг в `~/Developer/balda` — отдельный файл. Provider — `codex_acp`, reasoning `medium`; Obsidian MCP — `type: http`, `http://host.docker.internal:3101/mcp`.
## Zulip Integration
Balda и локальные агенты владеют оркестрацией, MCP, search/Obsidian и прикладными workflows. Execution Broker владеет disposable worker, lifecycle, credentials, инструментами и артефактами; его незавершённые задачи перечислены отдельно.
Полностью реализована. Webhook-based (не polling).
Тип бота: **Outgoing webhook** (не Generic bot).
Документация кода: [README](https://github.com/baldaworks/balda/blob/main/README.md), [configuration](https://github.com/baldaworks/balda/blob/main/docs/reference/configuration.md), [plugins](https://github.com/baldaworks/balda/blob/main/docs/reference/plugins.md). Для поведения ещё не merged PR смотреть его точный HEAD.
### 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 без токена
- После захвата топик отвечает на все сообщения (обычная сессия)
## Конфиг и инструкции
- [`balda/soul.md`](balda/soul.md) — soul (global_instruction) — редактировать здесь, синхронизировать в config.yaml
- [`balda/workspace-context.md`](balda/workspace-context.md) — per-provider system_instructions (рабочий проект/стек)
- `~/Developer/balda/.config/balda/config.yaml` — основной конфиг (runtime + balda)
- `~/Developer/balda/.env` — секреты (Zulip API key, webhook token)
### Запуск
```bash
cd ~/Developer/balda && ~/.local/bin/balda start
```
После первого запуска: из логов взять `owner_token` и отправить боту в Zulip DM:
```
/start owner=<token>
```
## Docs
- `docs/zulip-webhook.md` — полное руководство по настройке
- `docs/balda.md` — техническая спецификация
- [[personal/projects/archive/balda-reference-before-2026-10-14|Прежняя карточка, Zulip и старые provider templates]]
- [[personal/projects/balda/balda-mattermost-connector|Исторический дизайн Mattermost-коннектора]]
- [[personal/plans/balda-callee-prism-plan|Архив раннего плана Broker/Callee/Prism]]
- Старые Kraken/Valera/Claudio runbooks помечены историческими и не задают текущий запуск.