[2026-10-18] eagle: personal/plans/balda-remote-agent.md personal/plans/workspace-gateway.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-18 21:42:54 +06:00
1 parent 9aea42a57b
commit 6fad4b074d
2 files changed
+8 -3

No files matched your search

+3 -1
View File
@@ -9,13 +9,15 @@
## Актуальный статус 2026-10-18
Уточнение по поиску проектов, коммит `9e5066a`: рабочий root только `developer` (`/Users/admin/Developer`). Ошибочно включённый мной `downloads` удалён. Его зависший параллельный вызов скрывал от модели успешный ответ Developer; фактически Developer уже отвечал за 12 мс. Default query больше не обходит всё дерево исходников и dependencies: фильтруется выбранный уровень; глубокий поиск остаётся явным `recursive: true`. Проверены 139 папок корня, 8 вложенных папок workspace-gateway и поиск имени. Реальный Codex получил результаты и вывел их в ответе без approval (session `01a14fa7-60f2-7971-81de-b6c838ec1c31`). Это конкретная новая проверка; прежнее заявление о полной приёмке было преждевременным. Системные TCC/FDA permissions не выдавались и не обходились.
Исправления после production feedback закоммичены: Workspace Manager `1076b4f`, SSH Manager `f876d37`. Старые `execution-broker`/`execution-prism` MCP и broker-инструкция удалены из активного конфига; broker plugin отключён без удаления его файлов/ревизий. Оригинальные `prism` и `prism-callee` включены.
Codex работает с `workspace-write` и дополнительным writable root только для grants получателя. После точного согласия владельца активированы отдельные Docker seccomp/AppArmor profiles для bubblewrap; privileged/SYS_ADMIN не включались. Root grants остаётся operator-owned; пустые защищённые metadata targets позволяют собрать sandbox без права создавать произвольные grants.
Реальная модель внутри рабочей Balda успешно вызвала `workspace_folders`, `ssh_hosts`, `ssh_identity`, `ssh_config`, `ssh_registrations`, записала файл в `/workspace/work` и в настоящую динамически подключённую RW fixture. Запись вне workspace отвергнута (EROFS), **permission requests: 0**. Подготовка identity/config перенесена в запуск SSH Manager, поэтому их MCP lookup действительно read-only. Подтверждения выдачи/продления доступа и SSH authorize/revoke сохранены. Тестовые маркеры убраны, synthetic grant отозван/отмонтирован. Приёмка: `01a14f89-d937-78a0-b93d-71d70ef48179`, `candidate/model-policy-acceptance.json`, `candidate/review-fixes.json`. Повторяемый тест: `tests/balda_policy_acceptance.py`. Оба Go-проекта: race/vet/build — pass; HTTP health/login — 200. State/home/work тома и backup сохранены.
Workspace Manager (`e99f043`) и SSH Manager (`d9c19ee`) реализованы, проверены и работают как user launchd services на loopback. Владелец явно подтвердил два новых SSH-ключа: настоящий вход из Balda к Mac через обязательный Seatbelt принят; relay shell отвергается. Native SMB backend отзывает открытые FD и истекает независимо от Manager. Все 14 оригинальных Prism Role runtimes прошли `callee doctor` через SSH в совпадающем workspace. Native Beads 1.3.1/Dolt 2.5.0 прошли общие параллельные записи/чтение и гонку claim; из SSH+Seatbelt тот же bd работает через точный Unix socket без wildcard loopback.
Workspace Manager (`9e5066a`) и SSH Manager (`f876d37`) реализованы, проверены и работают как user launchd services на loopback. Владелец явно подтвердил два новых SSH-ключа: настоящий вход из Balda к Mac через обязательный Seatbelt принят; relay shell отвергается. Native SMB backend отзывает открытые FD и истекает независимо от Manager. Все 14 оригинальных Prism Role runtimes прошли `callee doctor` через SSH в совпадающем workspace. Native Beads 1.3.1/Dolt 2.5.0 прошли общие параллельные записи/чтение и гонку claim; из SSH+Seatbelt тот же bd работает через точный Unix socket без wildcard loopback.
**Production переключение завершено с явного разрешения владельца на перезапуск.** Balda и Web UI перезапущены 2026-10-18 в 20:13:46 Asia/Bishkek (14:13:46 UTC); активен штатный `ask`, сохранён прежний pool. Из настоящего рабочего контейнера прошли authenticated MCP initialize/list/read вызовы обоих Manager (4 и 6 tools) и SSH-команда через обязательный Seatbelt. `/backoffice/healthz` и `/backoffice/login` — HTTP 200; Mattermost websocket подключился. Сохранены все 49 sessions, 1926 events, 2 users и 87 execution jobs, прежние state/home/work тома. До переключения сделан consistent SQLite backup и копии compose/config в `~/.local/share/balda-workspace/backups/20261018T141324Z`; отчёт `candidate/activation.json`. Коммит приёмки `51a63af`, SSH Manager `d9c19ee`.
+5 -2
View File
@@ -2,8 +2,12 @@
Обновлено: **2026-10-18**.
Проект: `/Users/admin/Developer/workspace-gateway`.
Git: `main`, реализация `00b7e13`; актуальные deployment scripts и приёмка `1076b4f` (2026-10-18). Четыре MCP-функции реализованы; принят native SMB3 backend с фактическим отзывом открытых FD на Linux и Mac, независимым истечением срока и динамическим подключением без рестарта получателя. Сервис установлен как user launchd job на `127.0.0.1:17795`; аутентифицированные вызовы из доверенного образа Balda прошли. Production Balda переключена с явного разрешения владельца и перезапущена 2026-10-18 в 20:13:46 Asia/Bishkek: native ask активен, оба Manager проверены из рабочего контейнера, SSH/Seatbelt прошёл, HTTP health/login — 200. State/home/work, прежний pool и все записи БД сохранены; backup сделан до переключения. Полная модельная приёмка ещё ожидает отдельных решений по существующим CLI credentials и OpenCode localhost binding.
Git: `main`, реализация `00b7e13`; актуальные deployment scripts и приёмка `9e5066a` (2026-10-18). Четыре MCP-функции реализованы; принят native SMB3 backend с фактическим отзывом открытых FD на Linux и Mac, независимым истечением срока и динамическим подключением без рестарта получателя. Сервис установлен как user launchd job на `127.0.0.1:17795`; аутентифицированные вызовы из доверенного образа Balda прошли. Production Balda переключена с явного разрешения владельца и перезапущена 2026-10-18 в 20:13:46 Asia/Bishkek: native ask активен, оба Manager проверены из рабочего контейнера, SSH/Seatbelt прошёл, HTTP health/login — 200. State/home/work, прежний pool и все записи БД сохранены; backup сделан до переключения. Полная модельная приёмка ещё ожидает отдельных решений по существующим CLI credentials и OpenCode localhost binding.
Исправления production: Codex `workspace-write` принят реальной моделью в обычном workspace и динамическом RW grant, запись вне разрешённых roots запрещена. Пять безопасных Manager-запросов прошли без approval; изменения прав по-прежнему требуют владельца. Старый broker отключён, оригинальные Prism сохранены. Принятые Docker-профили включены только с точного согласия владельца; privileged/SYS_ADMIN не добавлены. Журнал и повторяемый модельный тест включены в `1076b4f`; SSH Manager — `f876d37`.
Корни проектов исправлены по замечанию владельца: **только `developer: /Users/admin/Developer`**. `downloads` был моей лишней настройкой и удалён из рабочего конфига и примера; дополнительные корни нельзя включать из примера без явного выбора владельца.
Приёмка `9e5066a`: из рабочего контейнера получены 139 папок Developer, 8 дочерних папок workspace-gateway, регистронезависимый поиск имени — 2 мс. `query` фильтрует текущий уровень, глубокий обход включается только `recursive: true`; прежний неявный обход всех файлов/зависимостей упирался в лимит. Настоящий Codex сделал пять folder calls и вывел реальные корни/количество/имена, permission requests: 0. Отчёт `candidate/project-discovery-acceptance.json`, тест `tests/balda_discovery_acceptance.py`, ACP session `01a14fa7-60f2-7971-81de-b6c838ec1c31`. Предыдущее заявление о полной проверке не включало просмотр внутри каждого рабочего root и было преждевременным.
Общий setup Balda: [[personal/plans/balda-remote-agent]].
## Назначение и четыре функции
@@ -28,7 +32,6 @@ Workspace Manager — пользовательское название серв
```yaml
roots:
developer: /Users/admin/Developer
downloads: /Users/admin/Downloads
```
Корень задаёт область обнаружения папок, а не автоматический доступ Balda или агентов ко всем его файлам. Сервис не монтирует целиком `Developer` или `Downloads` только потому, что они указаны в конфиге.