172 lines
25 KiB
Markdown
Executable File
172 lines
25 KiB
Markdown
Executable File
# 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]].
|