Files
obsidian-vault/personal/projects/balda/setup.md
T

172 lines
25 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Balda — актуальный локальный запуск
## Текущее состояние — сверено 2026-10-19 05:41 UTC
Актуальная сводка: [[personal/projects/balda/setup]]. Разделы с прежними версиями и планами ниже сохраняются как исторический журнал; они не заменяют эту сводку.
| Компонент | Текущее состояние |
| --- | --- |
| SSH Manager | 0.3.1, `afa3813`, 8 MCP-инструментов; импорт существующего Mac SSH alias без повторной передачи server key; `127.0.0.1:17796` |
| Workspace Manager | `0c82b8f`, 4 MCP-функции, native SMB3, `127.0.0.1:17795`; root только `developer: /Users/admin/Developer`, recipient `balda` |
| Balda | `254f3e29`, контейнер `balda-mm-mac`, provider `pool`, permissions `ask`; последний старт `2026-10-19T05:34:41.958112077Z` |
| Код и рабочие деревья | Все три checkout чистые; active SSH Manager binary SHA256 `f46fb2f4040ac33e94440f95556052e65f3c4e98d9b88b48c9db18d952749376` |
SSH: для уже доступного с Mac хоста достаточно alias; native SSH config/Include и доверенные known_hosts дают адрес, логин, порт и server key. Проверяется существующая аутентификация. Новый host получает отдельную identity; добавление/удаление, установка/отзыв ключа требуют штатного подтверждения владельца. Изоляция принимается до установки execution-ключа. Нет привязки к Kraken. Сейчас в inventory только `mac` и `mac-relay`; постоянная запись Kraken удалена, пустому relay запрещён forwarding. Последний тест случайных SSH aliases прошёл на установленном бинарнике: import, native isolation/ProxyJump, restart, revoke/remove.
Workspace: `workspace_folders`, `workspace_connect`, `workspace_disconnect`, `workspace_lease`; discovery выдаёт только папки. Доступ только к подтверждённой папке с RO/RW и сроком, без общего экспорта Developer/home. SMB отзывает существующие FD и истекает независимо от Manager. Сейчас журнал leases пуст. Дополнительные roots, включая Downloads, не включены.
Balda: настроены `obsidian`, `virfield`, `workspace-manager`, `ssh-manager`, плюс встроенный `balda`. Legacy Broker/Prism MCP отсутствуют в runtime; plugin `execution-broker` выключен, оригинальные `prism`/`prism-callee` 0.7.0 включены. У Codex — `workspace-write`, writable grants только получателя и `--mcp-approval-policy=allow`; lookup не требует generic approval, изменения доступа подтверждаются владельцем. Ответы на native approval в Mattermost исправлены в `254f3e29`; новая проверка сообщений в пользовательский чат не отправляла.
Launchd Workspace/SSH/Beads-Dolt — running; HTTP `/backoffice/healthz` и `/backoffice/login` — 200. Последняя model policy приёмка: `01a15298-98b7-7de0-9274-b2cd63c61958` (workspace RW, outside deny, lookup без approvals). Alias-only model fixture: `01a152a5-8b64-7dc1-be62-d007ff3a09c5`; production Kraken import: `01a152a8-1659-7860-bc63-ea9e8a2d92ba` (Decline, личные SSH config/known_hosts и production доступы сохранены).
Открытый объём исходного плана: полноценные Mac Codex/Claude/OpenCode model runs с отдельными CLI credentials/OpenCode network решениями, полный модельный Prism lifecycle и приёмка реальных project Beads DB. Shared Beads/Dolt concurrency и 14 Callee Role doctor проверены на fixture; реальные project DB не мигрировались. Это не блокирует принятые операции Workspace/SSH Manager и не считается завершённой полной агентной установкой.
Evidence: `~/.local/share/balda-workspace/candidate/operator-import.json`, `generic-host-manager.json`, `generic-host-policy.json`; исходная SMB/Beads приёмка — `/Users/admin/Developer/workspace-gateway/docs/acceptance-2026-10-18.md`.
## Текущие пути и эксплуатация — 2026-10-19
| Параметр | Значение |
| --- | --- |
| Compose | `/Users/admin/Docker/balda-mm-mac/docker-compose.yml` |
| Активный config | `/Users/admin/.local/share/balda-workspace/candidate/config/config.yaml` |
| Config mount | `/workspace/.config/balda`, read-only |
| Запускаемый binary | `/workspace/.config/balda/bin/balda`; SHA256 `b48e15ea8bc3d8a950900e8da99f7a67d391279914111f689f71667cc8be8361` |
| State / work | `/Users/admin/Docker/balda-mm-mac/state` и `/Users/admin/Docker/balda-mm-mac/work` |
| Home / SSH volumes | `balda_balda-home` → `/home/node`; `balda-ssh-manager` → `/run/ssh-manager:ro` |
| Инструкции Codex | Отдельный `runtime.providers.codex.system_instructions` не задан; [[personal/projects/balda/workspace-context]] |
Обычное добавление/удаление SSH-хоста и Workspace lease выполняется MCP-инструментами и не требует ручной правки config или restart. После изменения самого Balda config нужен разрешённый restart. После изменения MCP schema также обновляются сессии клиента. При restart Balda дождаться внутреннего `/backoffice/healthz:200`, затем пересоздать существующий `webui-proxy`, поскольку он использует `network_mode: service:balda`; проверить host health/login. Изменение Compose/env/mounts применяется через `docker-compose up -d`, а не одним restart.
Активный Balda binary берётся из config mount; изменение checkout само по себе его не заменяет. Для обновления нужен build выбранного source, атомарная установка binary и разрешённый restart с backup. Изменения managed plugin revisions не вносятся вручную. Eagle в этой сверке не изменялся и не перепроверялся; старые сведения о совпадении двух инстансов ниже исторические.
## Исторические снимки установки
## Историческое обновление — 2026-10-18
Новый сервис подключения папок: [[personal/plans/workspace-gateway|Workspace Gateway]], `/Users/admin/Developer/workspace-gateway`; создан каркас, реализации пока нет.
Проверка исходящего SSH и Seatbelt: [[personal/projects/balda/ssh-seatbelt-2026-10-18]]; сетевой SSH из контейнера доступен, production логин и sandbox launch ещё не приняты.
План удалённого исполнения: [[personal/plans/balda-remote-agent]].
Проверка штатного ACP поверх SSH: [[personal/projects/balda/ssh-acp-verification-2026-10-18]].
- Основной `balda-mm-mac`: image `balda-prism:20261018`, база `balda-upstream:a908ee1a`; проверенный checkout Balda — `a908ee1a5ff2`.
- `balda-mm-eagle` работает на `balda-upstream:a908ee1a`; добавления Prism/Virfield в этой сессии выполнялись только для основного инстанса.
- В основном конфиге выбран `balda.provider: pool`; настроены также провайдеры Codex, Claude Code, OpenCode и hosted API.
- В основном инстансе установлены оригинальные managed plugins `prism` и `prism-callee` версии `0.7.0`.
- Установлен `bd 1.3.1`; npm-пакет Callee `0.22.2` содержит бинарник, сообщающий `0.22.1`.
- Оригинальный Callee pack импортирован в постоянный `/home/node/.config/callee`; обычный каталог разрешает `prism/lifecycle` как Router, `prism/story` и `prism/epic` как Sequential.
- Virfield MCP подключён напрямую: `http://host.docker.internal:7780/mcp`, доступен провайдерам основного инстанса; проверены discovery 20 tools и чтение `virfield_status`.
- В native catalog сохранились `execution-broker`, `execution-prism`, `obsidian` и plugin `execution-broker`; это отдельные прежние интеграции.
- `balda.permissions.mode: allow_all`, `working_dir: /workspace`, `workspace.mode: off`.
- Уже подключён `/Users/admin/Docker/balda-mm-mac/work:/workspace/work`; общего mount `/Users/admin/Developer` в Balda нет.
- Установка сохранила 49 прежних session bindings и их capability snapshot IDs; историю и авторизации не сбрасывали.
- Новые сессии выбирают текущий каталог; существующие сохраняют закреплённый snapshot до штатного reset, который автоматически не выполнялся.
- Рабочие Balda, WebUI proxy и Eagle после SSH-проверки продолжают работать; временные проверочные контейнеры и производный образ удалены.
- Production-конфигурация на удалённый SSH provider ещё не переключалась; полный Prism lifecycle и реальные удалённые Claude/Codex не приняты.
Операторские версии и backup: `/Users/admin/Docker/balda-mm-mac/prism-runtime/setup.json` и `state/setup-backups/prism-20261018T151411/`.
SSH-проверка не вызывала модели и не отправляла сообщения в реальные чаты.
Доказательства проверки сохранены в самой заметке [[personal/projects/balda/ssh-acp-verification-2026-10-18]], включая JSON, логи и SHA256 исходных файлов.
## История установки до обновления 2026-10-18
Далее сохранены датированные сведения прежней установки; старые одинаковые image/provider/MCP обоих инстансов относятся к указанным старым проверкам.
Проверено: **2026-10-16** по обоим работающим контейнерам, Compose, binary hashes, сохранённому state и authenticated Broker/Prism MCP.
Обзор: [[personal/projects/balda/balda|Balda]]. Broker, версии и границы приёмки: [[personal/projects/balda/execution-broker|Execution Broker — текущий локальный контур]].
## Снимок установки 2026-10-16
| Параметр | Фактическое значение |
| --- | --- |
| Хост / контейнер | Mac / `balda-mm-mac` |
| Канал | Mattermost |
| Provider | `codex`, type `codex_acp`, reasoning effort `medium` |
| Образ обоих инстансов | `sha256:ee0567594b8f8422d71b3bb37aa47ef1222b089af6b24e17d50ac9c63a4ef22f` |
| Balda source | Чистый `upstream/main` — `3a58254bb05747fdeecde070b1828e770ed589a4`, без локальных патчей; Linux ARM64 binary SHA256 `9baff2c85757e839c6df3bd516518cc3d06bde2ad298a3dfdcdad1479ae186b7` |
| 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` |
Config bind-mounted в `/workspace/.config/balda` read-only для контейнера; state и work доступны ему на запись. Файл `~/Developer/balda/.config/balda/config.yaml` относится к отдельному dev checkout и не управляет этим контейнером.
## Eagle и общие инструменты — исторический снимок 2026-10-15
Eagle работает на том же Mac в `balda-mm-eagle`; Compose, config, state и work находятся в `/Users/admin/Docker/balda-mm-eagle/`, service — `eagle`, отдельный home volume — `balda_eagle-home`. Образы обоих инстансов одинаковы. Авторизации Codex раздельные; при обновлении home volumes сохранены. Историческая серверная проверка 2026-10-15: models endpoint отвечает HTTP 200 у обоих. У @balda реальная генерация в отдельной ephemeral read-only сессии завершилась ответом `AUTH_OK` и `turn.completed`; исходный аккаунт сохранён. После перечитывания credentials Mattermost websocket подключён, существующие беседы не сбрасывались. Не копировать auth между разными аккаунтами.
У обоих включены одинаковые Obsidian, Execution Broker и Prism MCP, одинаковые права runtime и managed plugin `execution-broker` rc.32. При настройке 2026-10-15 проверены реальные initialize/tools-list: Obsidian — 15, Broker — 26, Prism — 5 инструментов; списки совпадают. Eagle дополнительно имеет `asana-readonly`, URL `http://asana-readonly:3100/mcp` в приватной Docker-сети. Отдельный контейнер `balda-eagle-asana-readonly` не публикует порт на хост. Тогда реальное чтение Asana прошло; все пять операций изменения и запись заметок в файл отклоняются сервером.
В обоих конфигурациях provider `codex_acp`, reasoning `medium`, явный model отсутствует. Последние записи Codex подтверждают `gpt-6.1-sol` у обоих. При выравнивании инструментов настройки основной модели не менялись. `balda.nats.max_store` у обоих — `16gb`.
## Продолжение задач
Тип канала берётся из канонической привязки сессии. Для Mattermost он остаётся `mattermost`, включая native waits и возврат результата; `human.delivery_channel=telegram` меняет только доставку одобрения. SQLite/PostgreSQL migration исправляет прежний сгенерированный Telegram-заголовок в сохранённых ACP instructions без `/reset`, сохраняя provider thread, capability snapshot и историю. Согласованные Linux SQLite snapshots обоих инстансов прошли integrity/foreign-key checks; последнее обновление сохранило все 2277 прежних событий основного инстанса, locator, capability snapshots, provider threads и auth. Плагин rc32 совместим с текущей Balda и не требовал переустановки; immutable revisions сохранены. Согласованные state/home/config backups и отчёты обновления 2026-10-15: `state/balda-upstream-merged-20261015/`; полный race, lint, architecture, SQLite/PostgreSQL integration, migration validators, govulncheck, replay/NATS/ingress, managed plugin lifecycle и native wait restart тогда прошли на `b5f7d5b4`. Авторизация обоих инстансов после обновления подтверждена HTTP 200; backup миграции контекста также сохранён в `state/balda-channel-context-20261015/`.
В этой версии generic webhooks выполняют изолированные задания. Они не продолжают исходную сессию. Старые `routes.*.path`, `envelope.target`, `key_from_body`, `mode` и `fallback_to` удалены из конфигурации; listener задаётся через `balda.http`. Сейчас он слушает loopback `127.0.0.1:8095`.
Плагин rc32 использует `balda.state` и штатный `balda.session.wait`: наблюдатель вооружается до Start/retry и возвращается в исходную сессию. Managed lifecycle и restart-контракт проверены. Реальный conversational smoke с моделью, фактическим Telegram Human ответом, шестью проверенными артефактами, `cleanup=done` и единственным итоговым сообщением в исходной Mattermost-беседе прошёл; Story/Task закрыты и waits отменены. Реальная беседа прошла также HTTP 502 и restart Broker/Prism/Balda во время Human pause: тот же run/Story, provider thread и deadline восстановились, фактический Telegram approval принят, шесть артефактов проверены, `cleanup=done`. Story/Task закрыты, waits отменены, сообщение о завершении restart-приёмки подтверждено через Mattermost API. Старые callbacks Broker на `:8090` приостановлены, недоставленные cursors сохранены. Native wait acceptance не является подтверждением доставки сообщения провайдером.
Оба инстанса имеют также одинаковые пять глобальных Codex skills и одинаковую Codex tool policy; различий не найдено. Обновление плагина выполнено штатной переустановкой из нового operator source с сохранением `plugin-data/execution-broker`, старых revisions/catalog snapshots и содержимого прежнего marketplace. Существующие сессии не сбрасывались.
## Обновление 2026-10-16
Оба инстанса развёрнуты на чистом upstream `3a58254`; hash работающего binary сверён с точной сборкой. Сохранены config bytes, environment values, mounts, оба home volume, auth, все 2277 прежних событий основного инстанса и 49 session metadata/bindings. SQLite integrity и foreign keys прошли. На точном новом исходнике прошли полный race, lint, managed plugin lifecycle и native wait restart. Из обоих production network namespaces проверены 26 Broker tools, 5 Prism tools и `execution_profiles`. Новые проверки не вызывали модель и не отправляли сообщения; старые model/Asana/conversational receipts выше относятся к прежним датированным прогонам.
Актуальные snapshots и доказательства: `state/main-production-sync-20261016/coordinated-stack-snapshot/`, `active-deployment-before/`, `production-deployment.json`, `live-baldda-mcp.json`. Развёрнутый Broker/Prism/gateway — `rc34/13c29ac`; закреплённые managed plugin revisions и session capability snapshots сохранены.
## Исторические процедуры перезапуска — перед применением сверить текущие пути выше
| Изменение | Действие |
| --- | --- |
| Только 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` не применяет изменения Compose или `.env`. `--force-recreate` для изменения только config.yaml не требуется. До смены image сохраняют согласованный state backup и прежний image/config для отката.
## 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/baldaworks/balda/blob/main/docs/reference/plugins.md).
Management не сбрасывает существующие сессии. Новая сессия выбирает текущий catalog; существующая принимает capabilities через обычный `/reset`. Standalone skills также редактируются отдельно от уже закреплённого session snapshot.
[[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`. Авторизация CLI хранится в home volume. Для восстановления существующего @balda: `docker exec -it balda-mm-mac codex login --device-auth`, завершить вход в исходный аккаунт и проверить реальный запрос к провайдеру. `codex login status` подтверждает только наличие локальной авторизации и сам по себе не доказывает действительность токена на сервере. При необходимости перезапустить Balda для перечитывания auth; `/reset` не требуется. Для отдельного headless-входа используется команда из каталога Compose:
```bash
docker-compose run --rm --entrypoint codex balda login --device-auth
```
## Obsidian MCP
Проверенный блок активной конфигурации находится в `runtime.mcp_servers`:
```yaml
runtime:
mcp_servers:
obsidian:
type: http
url: http://host.docker.internal:3101/mcp
```
Используется Streamable HTTP. Для Codex ACP SSE-конфигурацию из старых заметок не переносить. После изменения этого блока нужен перезапуск Balda.
## Диагностика
```bash
docker ps --filter name=balda-mm-mac
docker logs --tail 120 balda-mm-mac
```
Проверять успешный startup provider и подключение Mattermost. Не копировать токены, cookie или login URLs из логов в заметки.
Архив старых схем и шаблонов: [[personal/projects/archive/balda-reference-before-2026-10-14]].