72 lines
9.0 KiB
Markdown
72 lines
9.0 KiB
Markdown
# Workspace Gateway — план
|
||
|
||
Обновлено: **2026-10-18**.
|
||
Проект: `/Users/admin/Developer/workspace-gateway`.
|
||
Git: `main`, начальный коммит `2bc6743`; создан каркас README/AGENTS/.gitignore, реализации сервиса пока нет.
|
||
Общий setup Balda: [[personal/plans/balda-remote-agent]].
|
||
|
||
## Назначение и четыре функции
|
||
|
||
Сервис выдаёт Balda и удалённым агентам доступ к исходным папкам через сетевую файловую систему.
|
||
Balda и агенты видят одни и те же файлы; копирование Git-репозитория не считается реализацией общего доступа.
|
||
|
||
1. **Папки:** листинг и навигация по папкам внутри настроенных корней (`developer`, `downloads` и других), а также поиск папок по имени; без выдачи списка файлов и их содержимого.
|
||
2. **Подключение:** выбранная папка появляется в work dir после подтверждения владельцем точного пути, получателя, режима доступа и срока.
|
||
3. **Отключение:** фактический отзыв ранее выданного доступа.
|
||
4. **Лизинг:** статус и срок действия, автоматический отзыв после истечения срока, продление с подтверждением владельца.
|
||
|
||
Четыре пользовательские функции — согласованный объём проекта.
|
||
Обработка ответа владельца, журнал выданных разрешений и таймеры обслуживают эти функции, а не расширяют API прикладными сценариями.
|
||
|
||
## Конфиг корней и поиск папок
|
||
|
||
Workspace Manager — пользовательское название сервиса; текущие путь проекта и имя этой заметки остаются `workspace-gateway`.
|
||
|
||
В конфиге задаются несколько именованных корней; список расширяется без изменения кода. Например:
|
||
|
||
```yaml
|
||
roots:
|
||
developer: /Users/admin/Developer
|
||
downloads: /Users/admin/Downloads
|
||
```
|
||
|
||
Корень задаёт область обнаружения папок, а не автоматический доступ Balda или агентов ко всем его файлам. Сервис не монтирует целиком `Developer` или `Downloads` только потому, что они указаны в конфиге.
|
||
|
||
Поиск выполняется по имени папки (полное имя или подстрока, без учёта регистра), в выбранном корне либо во всех настроенных корнях. Результат содержит имя корня и относительный путь папки, чтобы различать одинаковые имена. Имена файлов и содержимое файлов в поиск не входят. Выход за корни через `..` и символические ссылки не допускается. Подключение найденной папки по-прежнему требует подтверждения владельца точного пути, получателя, прав и срока.
|
||
|
||
Порядок реализации: загрузить и проверить `roots` из конфига; реализовать листинг/навигацию; добавить поиск по имени; включить операции в MCP; проверить поиск в нескольких корнях, одинаковые имена, отсутствующий/недоступный корень и запрет выхода за границы.
|
||
|
||
## Границы
|
||
|
||
SSH-запуск, ACP-транспорт, исполнение команд на хосте и Seatbelt относятся к настройке Balda и среды, а не к Workspace Gateway.
|
||
Prism, Callee, Beads, управление задачами и сессиями используются штатно.
|
||
Сервис не реализует собственные Story workflows, собственный Prism и дублирующий scheduler.
|
||
|
||
Общий каталог Developer и домашний каталог не выдаются агентам.
|
||
Листинг папок даёт возможность запросить конкретный путь, а не право читать его файлы.
|
||
Ответ от модели или аргумент `approved=true` не является подтверждением владельца.
|
||
Отзыв и истечение срока должны прекращать реальный доступ, включая существующие соединения и открытые файловые дескрипторы.
|
||
|
||
## Конкретные шаги
|
||
|
||
1. Я проверю готовую сетевую файловую систему на текущем Docker/Colima и целевых средах: исходные файлы видны обоим клиентам, добавление разрешённой папки обходится без перезапуска Balda, соседняя папка недоступна, отзыв закрывает уже выданный доступ.
|
||
2. Я подключу постоянную точку сетевой файловой системы в work dir; это разовая настройка deployment, последующие выдачи и отзывы происходят в рантайме.
|
||
3. Я реализую конфиг нескольких именованных корней (`developer`, `downloads` и других), листинг/навигацию и поиск папок по имени внутри этих корней; затем запрос подключения, связав подтверждение владельца с точным путём, получателем, правами и сроком. Сначала проверю пригодность штатных взаимодействий Balda. Приёмка поиска включает несколько корней, одинаковые имена папок, недоступный корень и запрет выхода через ссылки или `..`.
|
||
4. Я реализую отключение и временный лизинг, сохранение состояния разрешений и обработку истечения срока после перезапуска сервиса; неполученное подтверждение оставляет доступ закрытым.
|
||
5. Я проведу приёмку с двумя клиентами: общие файлы, RO/RW, запрет соседних путей и обхода через ссылки, отказ владельца, отзыв, истечение, продление и повторный запуск сервиса.
|
||
|
||
NFS/SMB или другой backend ещё не выбран: поддержка протокола сама по себе не подтверждает нужные свойства прав и отзыва.
|
||
До выбора backend сохраняется ровно этот объём; общая копия всех репозиториев и ослабление изоляции не являются заменой выдаче доступа.
|
||
|
||
## Что уже проверено и что остаётся
|
||
|
||
- [x] Создан отдельный Git-проект с зафиксированной границей четырёх функций.
|
||
- [x] Проверена независимая возможность штатного ACP Balda поверх SSH: [[personal/projects/balda/ssh-acp-verification-2026-10-18]].
|
||
- [ ] Выбрана и испытана сетевая файловая система.
|
||
- [ ] Реализованы четыре функции, подтверждения и фактическое ограничение доступа.
|
||
- [ ] Настроено общее состояние Beads и принята работа реальных агентов через полученный workspace.
|
||
|
||
Доступ к исходникам и доступ к состоянию Beads — связанные, но отдельные пункты общей установки.
|
||
Для одновременной работы Balda и нескольких агентов Beads описывает server mode Dolt: [официальная архитектура](https://github.com/gastownhall/beads/blob/main/docs/architecture/index.md).
|
||
Сетевой mount сам по себе не считается приёмкой конкурентной работы БД.
|