[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:
1 parent
e67a7c67e0
commit
f76558d6d3
6 files changed
+372
-255
No files matched your search
@@ -0,0 +1,227 @@
|
||||
# Balda — историческая карточка и шаблоны до 2026-10-14
|
||||
|
||||
> [!WARNING] Архив
|
||||
> Эти сведения и инструкции относятся к прежним версиям. Они не описывают текущий запуск и не применяются автоматически.
|
||||
> Актуальные карточки: [[personal/projects/balda/balda|Balda]], [[personal/projects/balda/setup|runbook]], [[personal/projects/balda/execution-broker|Broker и приёмка]].
|
||||
> Старые PR #8 и #12 уже merged. Литералы старых credentials заменены ссылкой на приватное хранилище.
|
||||
|
||||
## Карточка 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 и конфигурации не являются текущими.
|
||||
|
||||
Аналог Hermes. Go-сервис: берёт задачи из чата (Telegram или Zulip), запускает AI CLI и отвечает.
|
||||
|
||||
## Репо
|
||||
|
||||
- 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)
|
||||
|
||||
### 🔴 Два репозитория — не путать
|
||||
|
||||
| Репо | Что там | 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]]) |
|
||||
|
||||
Форки: `mallexxx/balda`, `mallexxx/runtime` — **разные**, клоны тоже разные.
|
||||
Детали по runtime-PR → [[personal/projects/balda/balda-valera]].
|
||||
|
||||
⚠️ **PR из форка: CI не запускается сам.** GitHub требует ручного подтверждения workflows
|
||||
владельцем репо («Approve and run workflows») → `mergeStateStatus: UNSTABLE` при
|
||||
`check-runs: total_count 0`. Это не поломка PR.
|
||||
|
||||
## Архитектура
|
||||
|
||||
- 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: `<из приватного хранилища>`
|
||||
- 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=<из приватного хранилища>
|
||||
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` — техническая спецификация
|
||||
|
||||
## Исторический шаблон global instruction: Валера / Zulip
|
||||
|
||||
> Это глобальная инструкция Балды (Валеры). Вставляется в system prompt каждой сессии.
|
||||
> После правки — синхронизировать вручную в `~/Developer/balda/.config/balda/config.yaml`
|
||||
> (поле `balda.global_instruction`), затем перезапустить Балду.
|
||||
|
||||
---
|
||||
|
||||
Ты **Валера** — практичный AI-ассистент команды в Zulip.
|
||||
|
||||
## Стиль
|
||||
|
||||
- Отвечай на языке собеседника (русский или English).
|
||||
- Кратко и конкретно. Никакой воды, никаких вступлений.
|
||||
- Показывай результат, а не процесс.
|
||||
- Код и команды — в fenced code blocks.
|
||||
- Не объясняй что ты сделал — пользователь видит результат.
|
||||
|
||||
## Работа
|
||||
|
||||
- Берёшь задачу и доводишь до конкретного результата.
|
||||
- Если задача большая или неоднозначная — уточни объём, прежде чем начать.
|
||||
- Возвращай что-то осязаемое: код, файл, ответ, список шагов.
|
||||
- Не останавливайся на полпути — если начал, закончи.
|
||||
|
||||
## Ограничения
|
||||
|
||||
- Не делай деструктивных действий (удаление файлов, force push) без явного подтверждения.
|
||||
- Не пиши в main/master напрямую. Используй ветки.
|
||||
- Если нужны credentials или secrets — попроси, не угадывай.
|
||||
|
||||
## Память
|
||||
|
||||
- Durable факты и предпочтения команды сохраняй через `balda.memory.remember`.
|
||||
- Не сохраняй промежуточные состояния задач и временный контекст.
|
||||
- Сохраняй: соглашения, предпочтения, архитектурные решения, стек.
|
||||
|
||||
## Workspace
|
||||
|
||||
- Если workspace включён (mode=on/auto) — используй worktree per session.
|
||||
- `balda.workspace.import` — перед началом крупных правок.
|
||||
- `balda.workspace.export` — после завершения, Conventional Commit message.
|
||||
- Не делай merge/rebase через raw git если доступны workspace MCP tools.
|
||||
|
||||
## Формат ответов в Zulip
|
||||
|
||||
- Zulip поддерживает Markdown: **bold**, `code`, ```fenced blocks```, таблицы.
|
||||
- Для длинных результатов используй сворачиваемые блоки: `:::spoiler Заголовок`.
|
||||
- Цитируй исходное сообщение только если нужна явная привязка.
|
||||
|
||||
## Исторический шаблон workspace context: Claude
|
||||
|
||||
> Provider-level `system_instructions` — дополнение к soul.md для конкретного провайдера.
|
||||
> Задаётся в `~/Developer/balda/.config/balda/config.yaml` под
|
||||
> `runtime.providers.claude_code.system_instructions`.
|
||||
|
||||
---
|
||||
|
||||
## Текущий контекст
|
||||
|
||||
Рабочий проект и стек пока не заданы. Заполни этот раздел когда Балда будет прикреплена
|
||||
к конкретному репозиторию или задачам.
|
||||
|
||||
Шаблон для заполнения:
|
||||
```
|
||||
## Проект
|
||||
|
||||
- Репо: ~/Developer/<project-name>
|
||||
- Стек: <language/framework>
|
||||
- Основная ветка: main
|
||||
|
||||
## Команда
|
||||
|
||||
- alex (owner) — говорит по-русски, можно и по-английски
|
||||
- <другие участники>
|
||||
|
||||
## Соглашения
|
||||
|
||||
- Стиль коммитов: Conventional Commits (feat/fix/chore/docs)
|
||||
- PR: через gh cli, base=main
|
||||
- Тесты: <framework>
|
||||
- Линтер: <tool>
|
||||
|
||||
## Workflow
|
||||
|
||||
- Задачи приходят в Zulip топик
|
||||
- Результат: коммит в ветку + краткий отчёт в тот же топик
|
||||
```
|
||||
|
||||
## Провайдер
|
||||
|
||||
`claude_code_acp` с моделью `claude-sonnet-4-6`.
|
||||
|
||||
Если нужны особые флаги модели:
|
||||
```yaml
|
||||
runtime:
|
||||
providers:
|
||||
claude_code:
|
||||
type: claude_code_acp
|
||||
system_instructions: |
|
||||
<вставить сюда содержимое этого файла>
|
||||
claude_code_acp:
|
||||
model: claude-sonnet-4-6
|
||||
```
|
||||
@@ -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 помечены историческими и не задают текущий запуск.
|
||||
@@ -1,42 +1,71 @@
|
||||
# Execution Broker — текущий локальный контур
|
||||
|
||||
Проверено: 2026-10-14. Репозиторий: `/Users/admin/Developer/execution-broker`.
|
||||
Проверено: **2026-10-14**, включая GitHub, репозитории, конфигурацию и работающие контейнеры.
|
||||
|
||||
## Состояние приёмки
|
||||
## Текущий статус
|
||||
|
||||
`main` и `origin/main` Broker остаются на `437cbf8`. Локальный кандидат `0.1.0-rc.26` зафиксирован в `codex/production-readiness` на `b64a1ba83c82475b08276ea3fb6a54c99d4a1509`. Смежные исправления Balda — отдельная ветка `codex/production-readiness` на `223b85ad213f77edebd452147d0058588813fe6c`, checkout `/private/tmp/execution-broker-balda-production`. Broker-кандидат не развёрнут и не опубликован. Для актуальной ветки Balda открыт [upstream PR #52](https://github.com/baldaworks/balda/pull/52). Указанная Balda `223b85ad` — отклонённый прототип; актуальный HEAD `085a0d43` находится в отдельной ветке `codex/ingress-outbox-v2`, см. пересмотр после ревью ниже.
|
||||
**Broker ещё не полностью реализован и не прошёл production-приёмку нового кандидата.** Локальные проверки rc.26 завершены; работающий контур использует прежние образы. Открытый [PR #52](https://github.com/baldaworks/balda/pull/52) относится к **Balda**: все **11/11 GitHub checks SUCCESS**, PR открыт и не draft, mergeable, ещё не merged. Одобрение независимого reviewer отсутствует.
|
||||
|
||||
Действующий Broker — `execution-broker:production-a3594c3`, gateway — `execution-broker-gateway:quality-437cbf8`, Prism — `execution-prism-adapter:session-fix-20261004`. Сверка обнаружила drift: `broker.json` и `worker.json` выбирают разные immutable images для `linux-smoke` и `linux-opencode-deepseek`; три coding-профиля worker.json по-прежнему содержат Docker socket/group. В исходниках rc.26 этот доступ запрещён, а несовпадение image pin отклоняется до выделения worker с освобождением недоставленного credential. До применения кандидата старый работающий контур этих защит не получает. macOS bootstrap-пакеты и dynamic build contexts также требуют согласованного обновления Runner/Callee/config/workflow pins. Проверки из предыдущей приёмки ниже относятся к прежним развёрнутым версиям.
|
||||
## Репозитории и действующие образы
|
||||
|
||||
### Локальная приёмка rc.26 — 2026-10-14
|
||||
| Компонент | Подтверждённое состояние |
|
||||
| --- | --- |
|
||||
| Broker repository | `/Users/admin/Developer/execution-broker`; `main` и `origin/main`: `437cbf8` |
|
||||
| Broker candidate | `0.1.0-rc.26`; код проверен на `b64a1ba83c82475b08276ea3fb6a54c99d4a1509`; текущая `codex/production-readiness`: `b7106b5` с последующими изменениями документации |
|
||||
| Broker production | `execution-broker:production-a3594c3` |
|
||||
| Gateway production | `execution-broker-gateway:quality-437cbf8` |
|
||||
| Prism production | `execution-prism-adapter:session-fix-20261004` |
|
||||
| Balda production | контейнер `balda-mm-mac`, образ `balda-balda`, image ID `sha256:56c00100258b1a478484ef20e044981ed0a569ec0ae7d6ba8608e8878a9e1f95` |
|
||||
| Balda PR candidate | `codex/ingress-outbox-v2`, HEAD `085a0d435f727a1f4628a3259998c6498d42fcf2`, checkout `/private/tmp/execution-broker-balda-upstream` |
|
||||
|
||||
По решению владельца GitHub Actions заменены локальным прогоном. Все запущенные финальные проверки прошли: полный Broker `make check build` на macOS ARM64 и Linux ARM64 (Colima), race-тесты Callee на обеих ОС, Balda `go test -race ./...`, golangci-lint и architecture check, проверка плагина на закреплённой версии Balda, source/binary govulncheck и gitleaks всей истории. Для Broker, Callee и Balda — 0 вызываемых уязвимостей; недостижимые findings остаются отдельно видны в полных отчётах. Исправлены Go 1.26.8 → 1.26.9 и x/net 0.58 → 0.60 у Balda/Callee. Gitleaks исключает только точный fingerprint ложного срабатывания на старый Mattermost post ID.
|
||||
Ветка Broker остаётся локальной. Ветка Balda опубликована в `mallexxx/balda`. Открытие PR не обновляло контейнеры.
|
||||
|
||||
Проверены реальные Docker/Callee Human pause → restart → resume → 5 артефактов → cleanup, embedded Beads и signed host-plan с rollback. Отдельно Linux ARM64 архив установлен без Go и source checkout: 4 сервисных образа, MCP, перезапуск Broker, 5 артефактов, succeeded и cleanup=done. Чистая установка закреплённых Claude/OpenCode/Node и ACP initialize прошла на macOS/Linux ARM64 без provider inference. Все четыре release-архива выполнили проверки версий, vault import/revoke, MCP, отказа без авторизации и SQLite backup; AMD64 на обеих ОС проверен через эмуляцию, не на native AMD64. Пять архивов rc.26 и SHA256SUMS лежат в `dist/`.
|
||||
## Что проверено у Broker rc.26
|
||||
|
||||
Полный отчёт и логи: `/Users/admin/Developer/execution-broker/state/production-readiness-20261014/local-checks.json`. Прежнее закрытие локальной задачи Balda `balda-7w4` пересмотрено после ревью: она переоткрывалась и закрыта заново после исправлений и новых проверок; подробности ниже. Обе ветки и коммиты сохранены локально, checkout чистые; автоматическая проверка запретила push исходников и истории без явного разрешения владельца.
|
||||
На принятой ревизии прошли `make check build` и проверки Callee на macOS ARM64 и Linux ARM64, race-тесты, adapter/plugin checks, source/binary govulncheck и gitleaks истории. Reachable vulnerabilities — 0; недостижимые findings сохранены в отчётах.
|
||||
|
||||
### Границы Broker и оставшаяся работа
|
||||
Реальный изолированный Docker/Callee flow прошёл Human pause → restart → resume → пять артефактов → cleanup. Linux ARM64 архив отдельно установлен без Go и source checkout: четыре сервисных образа, MCP, перезапуск Broker, пять артефактов, `succeeded`, `cleanup=done`. Закреплённые Claude/OpenCode/Node и ACP initialize проверены на macOS/Linux ARM64 без provider inference.
|
||||
|
||||
Предыдущий список смешивал Broker с локальными агентскими сценариями. Полный iPad sign/upload/install/unlock/launch, конфигурация search/Obsidian MCP, PR-workflows, миграция Hermes и решения об общем доступе к vault принадлежат Balda/локальному агенту или конкретному проекту. Включение их в условия готовности релиза Broker было ошибкой. Никакая новая политика прав Obsidian этим прогоном не реализована и не применялась. UI red/green и запись для конкретного приложения — его workflow; Broker отвечает за используемые им общие механизмы worker/guest execution и артефактов.
|
||||
Четыре платформенных архива rc.26 и отдельный plugin находятся в `dist/` с SHA256SUMS. Runtime probes архивов прошли; результаты AMD64 получены через эмуляцию. Native AMD64 этим не подтверждён. Старые live coding runs ниже относятся к прежним образам.
|
||||
|
||||
В актуальном `docs/work-plan.md` остаются собственные задачи Broker: согласованное развёртывание принятых бинарников/образов/bootstrap/plugin, универсальная подготовка стеков Linux/macOS, immutable tooling/Git caches, run-to-run artifact inputs и retention holds. Настраиваемый remote-action API — отдельное будущее расширение; обычный локальный агент может работать по SSH без него. Native AMD64 и off-host/Keychain disaster recovery остаются отдельными неподтверждёнными границами заявляемой поддержки. Физический iPad не является release gate Broker.
|
||||
## Что остаётся у Broker
|
||||
|
||||
### Пересмотр патчей Balda после ревью — 2026-10-14
|
||||
| Область | Состояние |
|
||||
| --- | --- |
|
||||
| Согласованное развёртывание | Не выполнено для кандидата: Broker/gateway, Runner/Callee, workflow/config pins, VM bootstrap и plugin должны составлять один принятый комплект |
|
||||
| Финальная live-приёмка | После обновления нужны реальный conversational run, артефакты, credential settlement, cleanup и outage/restart на совместимой версии Balda |
|
||||
| Универсальная подготовка стеков | В плане: версии инструментов, проверенные источники, readiness probes и восстановимое изменение окружения для Make/C/C++, CMake/Ninja, Python, Node, Rust/JVM на Linux/macOS |
|
||||
| Immutable caches | Общие tooling/Git caches остаются в плане; существующий Go SDK cache не является универсальным provisioning |
|
||||
| Артефакты между запусками | Digest-bound inputs и retention holds остаются в плане |
|
||||
| Платформы и recovery | Native AMD64 и восстановление после потери хоста/Keychain не подтверждены |
|
||||
|
||||
Старая `codex/production-readiness` / `223b85ad` — отклонённый прототип. Текущая `codex/ingress-outbox-v2` в `/private/tmp/execution-broker-balda-upstream` имеет HEAD `085a0d435f727a1f4628a3259998c6498d42fcf2`. База завершённых локальных проверок и саморевью — `9dcd366023105e217467510ef39582c2133ac5b9`, включённая merge-коммитом `09224f7e`. При открытии PR upstream продвинулся до `9cb3c2d7` (только QA layout test); ветка 1 behind / 7 ahead, конфликтов нет, дерево чистое, go.mod/go.sum не менялись. По явному запросу владельца ветка опубликована в `mallexxx/balda`, открыт [upstream PR #52](https://github.com/baldaworks/balda/pull/52), ready for review. GitHub CI запустился; его результат хранится отдельно от завершённых локальных проверок. Deploy не выполнялся.
|
||||
В текущих `broker.json` и `worker.json` сохраняется drift image pins для `linux-smoke` и `linux-opencode-deepseek`; три coding-профиля содержат Docker socket. Защиты rc.26 запрещают такой доступ и отклоняют несовпадение pin до allocation, но прежний production-контур этих новых защит не получает.
|
||||
|
||||
Повторное ревью выявило, что прежний replay-only фикс `4713490a` не закрывал webhook P1: pinned tgbotkit возвращает HTTP 200 до handler, поэтому второго callback или исходного text update может не быть. Этот вывод исправляет предыдущую оценку готовности. Коммит `085a0d43` сохраняет ответ и два recovery-маркера одной SQL-операцией. Отдельный `jobs/questionoutbox` запускается через Fx и автономно восстанавливает continuation после ошибки admission или рестарта без нового inbound. После durable receipt admission помечается отдельно, затем через общий outbox сохраняется очистка controls. Ошибка cleanup не переотправляет continuation; положительный Selected следует receipt. Поздняя привязка нового delivery ref возобновляет только cleanup, старый ref не может завершить новую очистку. Повтор идентичного delivery и уже завершённой очистки не создаёт её заново.
|
||||
Источник объёма работ — `/Users/admin/Developer/execution-broker/docs/work-plan.md`. Настраиваемый remote-action API — отдельное будущее расширение. iPad, прикладные UI/PR workflows, search/Obsidian и общая политика прав локального агента принадлежат Balda или конкретному проекту. Новая политика доступа к Obsidian этим прогоном не вводилась.
|
||||
|
||||
Новый regression использует настоящий pinned webhook/runtime, один HTTP update, production control publisher и Telegram adapter/messenger. Десять случаев — callback/text × ошибка AppKV, остановка до admission, ошибка до записи admission-маркера, commit маркера с ошибочным результатом, ошибка admission cleanup — проходят close/reopen SQLite и автономное восстановление без bot/второго callback. Проверяются ровно один continuation, сохранённый ответ и отсутствие раннего удаления controls/положительного ack. Отдельные контракты SQLite/PostgreSQL проверяют restart, delivery binding и независимые маркеры; миграционные тесты сохраняют прежние данные.
|
||||
## Balda: PR #52 и восстановление ingress
|
||||
|
||||
Выполнено самостоятельное ревью всего diff относительно upstream: 58 файлов, включая предыдущие outbox/NATS/architecture/CI/path fixes, новые файлы и документацию. В ходе него отдельный тест воспроизвёл повтор завершённой очистки; ошибка исправлена до финальных проверок. Хэши всех 58 файлов совпали с итоговым коммитом. Это self-review основного агента, не независимый PR review.
|
||||
[PR #52](https://github.com/baldaworks/balda/pull/52) открыт из `085a0d43` в `baldaworks/balda:main`. Все восемь required checks прошли: lint, test, SQLite/PostgreSQL integrations, architecture lint, projection replay, JetStream, ingress E2E. Дополнительно прошли native-launch jobs **Ubuntu, macOS и Windows** — всего 11/11 SUCCESS. Это проверки Balda; native AMD64 acceptance Broker остаётся отдельной границей.
|
||||
|
||||
На окончательном коде прошли `go test -race ./...` в штатном macOS TMPDIR, полные SQLite/PostgreSQL integration race suites, lint (0 issues), architecture, govulncheck (0 reachable vulnerabilities), обе Goose validations, настоящий projection replay 15 раз, JetStream, все ingress job packages, explicit native macOS MCP/stdio/provider/upgrade scenarios и build. PostgreSQL 17-alpine был одноразовым и удалён после тестов. Test cache использовался штатно. Это локальные проверки macOS ARM64; GitHub coverage upload и native Windows/Linux jobs не объявляются выполненными. Первые неудачные fixture/lint прогоны и red/green cleanup regression сохранены вместе с итоговыми логами.
|
||||
Локально основной агент отревьюил весь diff из 58 файлов. Прошли полный `go test -race ./...` в штатном macOS TMPDIR, обе tagged SQL integration suites, lint, architecture, govulncheck, Goose validations, projection replay 15 раз, ingress/native MCP scenarios и build. Хэши проверенных файлов совпадают с HEAD PR. Одноразовый PostgreSQL удалён. GitHub CI завершился после локальных проверок; полный `test` job завершился 2026-10-14 14:13:40 UTC.
|
||||
|
||||
README, configuration, operations и architecture docs обновлены. SQL migrations — SQLite 63 / PostgreSQL 28; перед обновлением нужен согласованный backup. Исторические answered-записи автоматически не переигрываются, потому что их прежний admission неизвестен. Гарантия начинается с сохранённого SQL-ответа; HTTP 200 означает только приём transport. Сохраняются документированные границы: один publisher на state DB, outbox expiry до 24 часов, terminal dedupe/GC семь дней. Предыдущие исправления accepted после локального сохранения, retention и opt-in NATS budgets сохранены; `07546cae` по-прежнему исправляет CI selectors.
|
||||
Durable admission сохраняет команду до receipt, background publication переживает NATS outage. Terminal receipts/tombstones собираются через семь дней, новые NATS budgets включаются только явно. Retry policy принадлежит `jobs/commandoutbox`, автономное восстановление ответов — `jobs/questionoutbox`; concrete wiring находится в `commandoutboxfx`.
|
||||
|
||||
Отчёт, история пересмотренных оценок, хэши self-review и логи: `/Users/admin/Developer/execution-broker/state/production-readiness-20261014/review-followup.json`. Beads `balda-7w4` закрыта после всех финальных проверок в явно локальной временной базе; это не shared upstream task. CLI: `/private/tmp/execution-broker-native-tools/bd`, в PATH не установлен; проектная база без issue_prefix не переинициализировалась.
|
||||
Ответ и два recovery-маркера сохраняются одной SQL-операцией. Worker восстанавливает continuation без нового inbound, после receipt отдельно сохраняет cleanup controls. Ошибка cleanup не переотправляет continuation, положительный Telegram Selected следует durable admission. Late delivery binding и повтор завершённой очистки проверены. Regression использует реальный pinned webhook/runtime, production control publisher, один HTTP update и десять failure/restart случаев для callback/text; второго bot/callback после reopen нет.
|
||||
|
||||
SQLite migration **63** / PostgreSQL migration **28** требуют согласованного backup. Исторические answered-записи не переигрываются автоматически. Гарантия начинается с SQL settlement; webhook HTTP 200 означает transport intake. Сохраняются границы: один publisher на state DB, outbox pending lifetime до 24 часов, terminal dedupe семь дней. PR ещё не merged; его исправления не объявляются развёрнутыми.
|
||||
|
||||
Прежняя Balda `codex/production-readiness` / `223b85ad` — отклонённый прототип, оставленный для истории. Источником текущей реализации является PR #52. PR [#8](https://github.com/baldaworks/balda/pull/8) merged 2026-09-29, PR [#12](https://github.com/baldaworks/balda/pull/12) merged 2026-10-03.
|
||||
|
||||
## Навигация и доказательства
|
||||
|
||||
- [[personal/projects/balda/setup|Balda: действующая конфигурация и перезапуск]]
|
||||
- [[personal/projects/balda/balda|Balda: обзор и актуальные PR]]
|
||||
- `state/production-readiness-20261014/review-followup.json` — текущий Balda diff, self-review, проверки, PR/CI и история пересмотренных выводов.
|
||||
- `state/production-readiness-20261014/local-checks.json` — исторический прогон Broker rc.26. Его результаты по старому Balda prototype не заменяют текущий review-followup.
|
||||
- `state/production-readiness-20261014/balda-v5-reviewed-files.json` — хэши 58 проверенных файлов; полные логи лежат рядом.
|
||||
- Beads `balda-7w4` закрыта в явно локальной временной базе. Это не shared upstream issue и не независимый PR review.
|
||||
- [[personal/plans/balda-callee-prism-plan|Архив прежнего плана]], [[personal/projects/archive/balda-reference-before-2026-10-14|архив прежней карточки и шаблонов]].
|
||||
|
||||
### История приёмки действующих версий
|
||||
|
||||
@@ -82,4 +111,5 @@ Detached HEAD — штатный checkout закреплённой ревизи
|
||||
|
||||
`execution_diagnostics` проверяет checksum артефактов и извлекает bounded причину Callee или Runner из `callee.log`, даже без `quality.json`, для failed, expired и canceled. Реальный expired run проверен через MCP после развёртывания fd29974. Отдельным тестом воспроизведён прежний отказ журнала для длинного Human: теперь вопрос до 256 КиБ сохраняется целиком, Human event ограничен 512 КиБ, остальные события — 32 КиБ. Конкретная ошибка обработки события сохраняется в редактированном логе Runner. Ошибки cleanup записываются отдельно в cleanup_error и не заменяют исходную причину исполнения. Cleanup, завершившийся во время отложенной доставки terminal, получает отдельное уведомление; более поздний receipt не скрывает его.
|
||||
|
||||
Подробные контракты: `docs/telegram-approvals.md`, `docs/operations.md`, `docs/protocol.md`, `docs/testing.md`. Будущие host permissions, SSH command catalog, iPad и прочие миграционные задачи — отдельные планы в `docs/work-plan.md`; они не объявлены реализованными этой приёмкой.
|
||||
Подробные контракты: `docs/telegram-approvals.md`, `docs/operations.md`, `docs/protocol.md`, `docs/testing.md`. Собственные задачи Broker и границы релиза перечислены в `docs/work-plan.md`. iPad, search/Obsidian, общие права локального агента и персональные workflows относятся к вызывающему проекту или Balda; они не являются release gates Broker.
|
||||
|
||||
@@ -1,87 +1,82 @@
|
||||
# Balda — актуальный локальный запуск
|
||||
|
||||
Execution Broker, Telegram-одобрения и текущая приёмка: [[personal/projects/balda/execution-broker|Execution Broker — текущий локальный контур]].
|
||||
Проверено: **2026-10-14** по работающему контейнеру, Compose, конфигурации и GitHub.
|
||||
|
||||
Broker-кандидат 2026-10-14: `0.1.0-rc.26` / `b64a1ba`, локальные проверки сохранены отдельно. Старая Balda `223b85ad` / `codex/production-readiness` отклонена. Текущая `codex/ingress-outbox-v2` / `085a0d43` синхронизирована merge’ем с upstream `9dcd3660` в `/private/tmp/execution-broker-balda-upstream` (1 behind / 7 ahead после нового QA-only коммита upstream `9cb3c2d7`, конфликтов нет, дерево чистое).
|
||||
Обзор: [[personal/projects/balda/balda|Balda]]. Broker, готовность кандидата и оставшаяся работа: [[personal/projects/balda/execution-broker|Execution Broker — текущий локальный контур]].
|
||||
|
||||
Прежний replay-only фикс Telegram был недостаточен: webhook HTTP 200 предшествует handler. Теперь ответ и recovery-маркеры сохраняются атомарно в SQL, а worker восстанавливает continuation после рестарта без второго update; controls durably допускаются после continuation. Реальный single-update webhook regression с production control publisher прошёл десять failure/restart случаев для callback и текста. Самостоятельно проверен весь diff ветки (58 файлов); прошли финальный полный race-gate, обе storage integration suites, lint/architecture/security/migrations, projection/JetStream/ingress, native macOS MCP scenarios и build. SQLite migration 63 / PostgreSQL migration 28 требуют backup; исторические answered-записи не переигрываются. Полные границы и логи — в карточке выше.
|
||||
## Что работает сейчас
|
||||
|
||||
По явному запросу владельца ветка опубликована в `mallexxx/balda`; открыт [upstream PR #52](https://github.com/baldaworks/balda/pull/52), GitHub CI запустился. Изменения не развёрнуты; контейнер `balda-mm-mac` остаётся на прежнем образе. Публикация PR не меняет действующий сервис.
|
||||
| Параметр | Фактическое значение |
|
||||
| --- | --- |
|
||||
| Хост / контейнер | Mac / `balda-mm-mac` |
|
||||
| Канал | Mattermost |
|
||||
| Provider | `codex`, type `codex_acp`, reasoning effort `medium` |
|
||||
| Образ | `balda-balda`, image ID `sha256:56c00100258b1a478484ef20e044981ed0a569ec0ae7d6ba8608e8878a9e1f95` |
|
||||
| Compose | `/Users/admin/Docker/balda-mm-mac/docker-compose.yml` |
|
||||
| Активный конфиг | `/Users/admin/Docker/balda-mm-mac/config/config.yaml` |
|
||||
| State / plugins | `/Users/admin/Docker/balda-mm-mac/state` |
|
||||
| Workspace | `/Users/admin/Docker/balda-mm-mac/work` |
|
||||
| Home volume | `balda_balda-home`, mounted в `/home/node` |
|
||||
|
||||
_Проверено: 2026-10-09._
|
||||
Config bind-mounted в `/workspace/.config/balda` read-only для контейнера; state и work доступны ему на запись. Файл `~/Developer/balda/.config/balda/config.yaml` относится к отдельному dev checkout и не управляет этим контейнером.
|
||||
|
||||
> Это основной runbook для текущей Balda на Mac. Старые документы про `balda-agent-valera-1`, Zulip и Kraken — исторические.
|
||||
## Проверенная ветка и PR
|
||||
|
||||
## Текущая схема
|
||||
[PR #52](https://github.com/baldaworks/balda/pull/52): `codex/ingress-outbox-v2`, HEAD `085a0d43`, **OPEN**, не draft, mergeable; все **11/11 CI checks SUCCESS**, включая native Ubuntu/macOS/Windows. PR ещё не merged и не развёрнут.
|
||||
|
||||
- Хост: Mac.
|
||||
- Контейнер: `balda-mm-mac`.
|
||||
- Канал: Mattermost.
|
||||
- Провайдер: Codex ACP.
|
||||
- Compose: `/Users/admin/Docker/balda-mm-mac/docker-compose.yml`.
|
||||
- Конфиг: `/Users/admin/Docker/balda-mm-mac/config/config.yaml`.
|
||||
- Состояние и managed plugins: `/Users/admin/Docker/balda-mm-mac/state`.
|
||||
- Рабочие каталоги: `/Users/admin/Docker/balda-mm-mac/work`.
|
||||
Локальные race/integration/lint/security/migration/E2E проверки и self-review 58 файлов завершены. Исправление сохраняет SQL handoff ответа и восстанавливает continuation после рестарта без второго webhook update; controls durably допускаются после continuation. SQLite migration 63 / PostgreSQL migration 28 требуют backup; исторические answered-записи автоматически не переигрываются. Подробности и границы — в карточке Broker выше.
|
||||
|
||||
Каталоги `config`, `state` и `work` bind-mounted в контейнер. Домашний каталог контейнера хранится в Docker volume `balda_balda-home`.
|
||||
PR #8 и #12 уже merged. Старые ссылки на открытые #8/#12, Kraken, Валеру и Zulip относятся к архивам.
|
||||
|
||||
## Что применять какой командой
|
||||
## Изменения и перезапуск
|
||||
|
||||
| Изменение | Действие |
|
||||
|---|---|
|
||||
| Только содержимое `config/config.yaml` | `docker restart balda-mm-mac` |
|
||||
| `.env`, environment, mounts или service definition в Compose | `docker-compose up -d balda` |
|
||||
| Новый image/tag | `docker-compose pull && docker-compose up -d balda` |
|
||||
| Изменение исходного кода | Собрать image, затем `docker-compose up -d balda` |
|
||||
| Managed plugin | Использовать `/plugin install\|upgrade\|enable\|disable\|remove` |
|
||||
| Plugin/skill для уже открытой беседы | `/reset` после активации изменения |
|
||||
| --- | --- |
|
||||
| Только host `config/config.yaml` | `docker restart balda-mm-mac`: процесс перечитывает конфигурацию при старте |
|
||||
| `.env`, environment, mounts, service definition | Из каталога Compose: `docker-compose up -d balda` |
|
||||
| Новый image | Сначала получить или собрать выбранный образ, затем `docker-compose up -d balda`; в действующем Compose нет build-секции |
|
||||
| Код в checkout | Сам по себе не обновляет образ; нужен отдельный build и применение выбранного image |
|
||||
| Изменение catalog / skills существующей беседы | Обычный `/reset` для выбора текущего capability snapshot |
|
||||
|
||||
`docker restart` перечитывает bind-mounted `config.yaml`, потому что Balda читает его при старте процесса. Он не перечитывает `.env` и не применяет изменения Compose.
|
||||
`docker restart` не применяет изменения Compose или `.env`. `--force-recreate` для изменения только config.yaml не требуется. До смены image сохраняют согласованный state backup и прежний image/config для отката.
|
||||
|
||||
Принудительное `--force-recreate` для изменения только `config.yaml` не требуется.
|
||||
## Plugins, skills и инструкции
|
||||
|
||||
## Plugins и skills
|
||||
Managed plugin revisions неизменяемые; вручную редактировать их содержимое в state нельзя. Каноническая документация выбранной ветки описывает управление пакетами через **Backoffice → Operations → Plugins**: Installed/Marketplaces, review exact revision, install/upgrade/enable/disable/rollback/remove. Проверять доступность поверхности на используемой версии, а не переносить команды из архивных runbooks: [plugins reference](https://github.com/mallexxx/balda/blob/085a0d435f727a1f4628a3259998c6498d42fcf2/docs/reference/plugins.md).
|
||||
|
||||
Managed plugin revisions в `state` неизменяемые и проверяются по digest. Их нельзя редактировать вручную в папке. Изменения устанавливаются через команды `/plugin`.
|
||||
Management не сбрасывает существующие сессии. Новая сессия выбирает текущий catalog; существующая принимает capabilities через обычный `/reset`. Standalone skills также редактируются отдельно от уже закреплённого session snapshot.
|
||||
|
||||
Каталог плагинов обновляется в работающем процессе после install/upgrade/enable/disable/remove. Уже созданная сессия закреплена за старым snapshot, поэтому для неё нужен `/reset`.
|
||||
|
||||
Файлы standalone skills редактировать можно, но существующая сессия также увидит новый snapshot только после `/reset`.
|
||||
[[personal/projects/balda/soul|Global instruction]] содержит сверенный снимок `balda.global_instruction`. [[personal/projects/balda/workspace-context|Provider context]] описывает `runtime.providers.codex.system_instructions`; сейчас отдельное значение не настроено. Редактирование заметки не меняет работающий конфиг.
|
||||
|
||||
## Codex ACP
|
||||
|
||||
Актуальный reasoning effort: `medium`.
|
||||
|
||||
Codex авторизация хранится в home-volume контейнера. Для headless-входа:
|
||||
Reasoning effort в активном конфиге — `medium`. Авторизация CLI хранится в home volume. Для отдельного headless-входа используется команда из каталога Compose:
|
||||
|
||||
```bash
|
||||
cd /Users/admin/Docker/balda-mm-mac
|
||||
docker-compose run --rm --entrypoint codex balda login --device-auth
|
||||
```
|
||||
|
||||
## Obsidian MCP
|
||||
|
||||
Codex ACP поддерживает `stdio` и Streamable HTTP. SSE-конфигурация не поддерживается.
|
||||
Проверенный блок активной конфигурации находится в `runtime.mcp_servers`:
|
||||
|
||||
```yaml
|
||||
mcp_servers:
|
||||
obsidian:
|
||||
type: http
|
||||
url: http://host.docker.internal:3101/mcp
|
||||
name: obsidian
|
||||
runtime:
|
||||
mcp_servers:
|
||||
obsidian:
|
||||
type: http
|
||||
url: http://host.docker.internal:3101/mcp
|
||||
```
|
||||
|
||||
После изменения только этого блока:
|
||||
Используется Streamable HTTP. Для Codex ACP SSE-конфигурацию из старых заметок не переносить. После изменения этого блока нужен перезапуск Balda. Новая политика прав vault или folders здесь не вводится.
|
||||
|
||||
```bash
|
||||
docker restart balda-mm-mac
|
||||
```
|
||||
|
||||
## Проверка
|
||||
## Диагностика
|
||||
|
||||
```bash
|
||||
docker ps --filter name=balda-mm-mac
|
||||
docker logs --tail 120 balda-mm-mac
|
||||
```
|
||||
|
||||
В логах должны быть успешная инициализация Codex ACP, готовность provider и подключение Mattermost WebSocket.
|
||||
Проверять успешный startup provider и подключение Mattermost. Не копировать токены, cookie или login URLs из логов в заметки.
|
||||
|
||||
Архив старых схем и шаблонов: [[personal/projects/archive/balda-reference-before-2026-10-14]].
|
||||
@@ -1,49 +1,21 @@
|
||||
# Balda Soul — Global Instruction
|
||||
# Balda — global instruction
|
||||
|
||||
> Это глобальная инструкция Балды (Валеры). Вставляется в system prompt каждой сессии.
|
||||
> После правки — синхронизировать вручную в `~/Developer/balda/.config/balda/config.yaml`
|
||||
> (поле `balda.global_instruction`), затем перезапустить Балду.
|
||||
Проверено: **2026-10-14**. Ниже точный снимок `balda.global_instruction` из активного `/Users/admin/Docker/balda-mm-mac/config/config.yaml`. Он относится к контейнеру `balda-mm-mac`; dev-конфиг в `~/Developer/balda` является отдельным файлом.
|
||||
|
||||
---
|
||||
Порядок инструкций в Balda: built-in → `balda.global_instruction` → `runtime.providers.<provider_id>.system_instructions`. Текущий provider — `codex`; отдельные provider-level инструкции не настроены.
|
||||
|
||||
Ты **Валера** — практичный AI-ассистент команды в Zulip.
|
||||
## Действующее значение
|
||||
|
||||
## Стиль
|
||||
Ты Балда — AI-помощник в Mattermost.
|
||||
|
||||
- Отвечай на языке собеседника (русский или English).
|
||||
- Кратко и конкретно. Никакой воды, никаких вступлений.
|
||||
- Показывай результат, а не процесс.
|
||||
- Код и команды — в fenced code blocks.
|
||||
- Не объясняй что ты сделал — пользователь видит результат.
|
||||
Отвечай кратко и по делу. Русский или English — как к тебе обратились.
|
||||
Код и команды в fenced code blocks.
|
||||
Не объясняй процесс, показывай результат.
|
||||
В каналах ты отвечаешь только когда тебя упомянули через @balda.
|
||||
For execution-broker calls, use the exact current Balda Session ID shown under Session in the system instruction as chat_id and an empty topic_id. The channel type is also shown there; never infer Telegram from numeric Mattermost metadata. Numeric chat_id=0 and topic_id=0 are transport placeholders and must never be sent to execution tools. Never ask the user to supply a Session ID. If an existing Story has chat_id=0 or topic_id=0, create a new Story and Task with the current Session ID and new Story and run idempotency keys before starting a new execution. Do not reuse the placeholder-bound Story because Prism cannot sync it. At a coding approval question, forward the exact free-text requirement change with execution_respond for that run; Callee will regenerate the plan and ask again without a new Story or run. Reply approved only after the user approves the latest plan.
|
||||
|
||||
## Работа
|
||||
## Как поддерживать этот снимок
|
||||
|
||||
- Берёшь задачу и доводишь до конкретного результата.
|
||||
- Если задача большая или неоднозначная — уточни объём, прежде чем начать.
|
||||
- Возвращай что-то осязаемое: код, файл, ответ, список шагов.
|
||||
- Не останавливайся на полпути — если начал, закончи.
|
||||
Изменение заметки само по себе не меняет production-конфигурацию. Изменение глобальных инструкций применяется отдельно через активный host config и перезапуск Balda по [[personal/projects/balda/setup|runbook]]. При последующей актуализации заметку снова сверяют с этим файлом.
|
||||
|
||||
## Ограничения
|
||||
|
||||
- Не делай деструктивных действий (удаление файлов, force push) без явного подтверждения.
|
||||
- Не пиши в main/master напрямую. Используй ветки.
|
||||
- Если нужны credentials или secrets — попроси, не угадывай.
|
||||
|
||||
## Память
|
||||
|
||||
- Durable факты и предпочтения команды сохраняй через `balda.memory.remember`.
|
||||
- Не сохраняй промежуточные состояния задач и временный контекст.
|
||||
- Сохраняй: соглашения, предпочтения, архитектурные решения, стек.
|
||||
|
||||
## Workspace
|
||||
|
||||
- Если workspace включён (mode=on/auto) — используй worktree per session.
|
||||
- `balda.workspace.import` — перед началом крупных правок.
|
||||
- `balda.workspace.export` — после завершения, Conventional Commit message.
|
||||
- Не делай merge/rebase через raw git если доступны workspace MCP tools.
|
||||
|
||||
## Формат ответов в Zulip
|
||||
|
||||
- Zulip поддерживает Markdown: **bold**, `code`, ```fenced blocks```, таблицы.
|
||||
- Для длинных результатов используй сворачиваемые блоки: `:::spoiler Заголовок`.
|
||||
- Цитируй исходное сообщение только если нужна явная привязка.
|
||||
Исторический шаблон для Валеры/Zulip сохранён в [[personal/projects/archive/balda-reference-before-2026-10-14]]. Контекст конкретного provider описан в [[personal/projects/balda/workspace-context]].
|
||||
@@ -1,54 +1,22 @@
|
||||
# Balda Workspace Context
|
||||
# Balda — provider context
|
||||
|
||||
> Provider-level `system_instructions` — дополнение к soul.md для конкретного провайдера.
|
||||
> Задаётся в `~/Developer/balda/.config/balda/config.yaml` под
|
||||
> `runtime.providers.claude_code.system_instructions`.
|
||||
Проверено: **2026-10-14** по активному конфигу `/Users/admin/Docker/balda-mm-mac/config/config.yaml`.
|
||||
|
||||
---
|
||||
Текущий provider — `codex`, type `codex_acp`, reasoning effort `medium`. Поле `runtime.providers.codex.system_instructions` **не настроено**; эта заметка не объявляет Balda привязанной к одному репозиторию.
|
||||
|
||||
## Текущий контекст
|
||||
Дополнение для этого provider задаётся в активном host config, отдельно от [[personal/projects/balda/soul|global instruction]]. Пример структуры:
|
||||
|
||||
Рабочий проект и стек пока не заданы. Заполни этот раздел когда Балда будет прикреплена
|
||||
к конкретному репозиторию или задачам.
|
||||
|
||||
Шаблон для заполнения:
|
||||
```
|
||||
## Проект
|
||||
|
||||
- Репо: ~/Developer/<project-name>
|
||||
- Стек: <language/framework>
|
||||
- Основная ветка: main
|
||||
|
||||
## Команда
|
||||
|
||||
- alex (owner) — говорит по-русски, можно и по-английски
|
||||
- <другие участники>
|
||||
|
||||
## Соглашения
|
||||
|
||||
- Стиль коммитов: Conventional Commits (feat/fix/chore/docs)
|
||||
- PR: через gh cli, base=main
|
||||
- Тесты: <framework>
|
||||
- Линтер: <tool>
|
||||
|
||||
## Workflow
|
||||
|
||||
- Задачи приходят в Zulip топик
|
||||
- Результат: коммит в ветку + краткий отчёт в тот же топик
|
||||
```
|
||||
|
||||
## Провайдер
|
||||
|
||||
`claude_code_acp` с моделью `claude-sonnet-4-6`.
|
||||
|
||||
Если нужны особые флаги модели:
|
||||
```yaml
|
||||
runtime:
|
||||
providers:
|
||||
claude_code:
|
||||
type: claude_code_acp
|
||||
codex:
|
||||
type: codex_acp
|
||||
system_instructions: |
|
||||
<вставить сюда содержимое этого файла>
|
||||
claude_code_acp:
|
||||
model: claude-sonnet-4-6
|
||||
<контекст и соглашения для этого provider>
|
||||
codex_acp:
|
||||
reasoning_effort: medium
|
||||
```
|
||||
|
||||
Пример — шаблон, а не установленная конфигурация. Описание конкретного проекта должно содержать точный repository/worktree, задачу, критерии приёмки и команды проверок; стек определяется проектом. Изменение заметки не применяет эти настройки к контейнеру.
|
||||
|
||||
Пути, перезапуск и session boundaries: [[personal/projects/balda/setup]]. Старый Claude/Zulip template: [[personal/projects/archive/balda-reference-before-2026-10-14]].
|
||||
Reference in new issue
Block a user