[2026-09-26] eagle: family/how-to/truenas-infrastructure.md personal/plans/balda-mm-phase4-agents.md personal/tech/agents-bridge.md personal/tech/eagle-dashboard-agents-tab.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 19:00:19 +06:00
1 parent 31644d1010
commit 769bb4c21b
4 files changed
+288 -27

No files matched your search

+55 -13
View File
@@ -1,10 +1,12 @@
# Фаза 4 — исполнитель на Mac + `~/agents` + секция «Agents» в Eagle Dashboard
> План. **Шаги 1-2 выполнены** (2026-09-26): образ собран, контейнер `balda-executor` Up (healthy),
> План. **Шаги 1-3 выполнены** (2026-09-26): образ собран, контейнер `balda-executor` Up (healthy),
> `claude 2.1.283` + `codex 0.157.1` внутри, монтирования проверены в обе стороны.
> Мост `agents-bridge` :8790 поднят и протестирован (auth, идемпотентность, сквозной вызов CLI).
> 🔴 Осталось: **логин CLI делает Alex сам** (копирование auth-файлов отклонено); мост не в launchd;
> шаги 3-6 не начаты.
> Мост `agents-bridge` :8790 — под **launchd** (`com.agents.bridge`, `RunAtLoad` + `KeepAlive`),
> протестирован (auth 401, идемпотентность, сквозной вызов CLI).
> Шаг 4 — **код написан, не активирован** (нужен перезапуск дашборда).
> 🔴 Осталось: **логин CLI делает Alex сам**; активация секции «Agents»; шаг 3 (туннель);
> шаги 5-6.
> Часть [[personal/projects/balda/balda-mm-delegation-plan]] (Фазы 4-5).
> Предыдущее: [[personal/projects/balda/balda-kraken-mm-deploy]] (Фаза 3 ✅ — бот отвечает Alex).
@@ -240,6 +242,26 @@ cd ~/Developer/agents-bridge
~/Developer/eagle-dash/.venv/bin/python -m uvicorn app:app --host 127.0.0.1 --port 8790
```
### ✅ Шаг 3 ВЫПОЛНЕН (2026-09-26) — мост под launchd
Плейт `com.agents.bridge`: `~/Library/LaunchAgents/com.agents.bridge.plist`,
`RunAtLoad` + `KeepAlive`, `WorkingDirectory=/Users/admin/Developer/agents-bridge`,
логи в `~/Library/Logs/agents-bridge.{log,err.log}`.
Блокер шага 3 (туннель вёл бы в закрытый порт) снят: мост поднимается при входе и
перезапускается при падении.
```bash
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.agents.bridge.plist
launchctl list | grep agents.bridge # → 3063 0 com.agents.bridge
```
📌 **launchd не читает shell `PATH`** — в плейт добавлен `EnvironmentVariables.PATH`
с `/opt/homebrew/bin` (иначе `executor.py` не найдёт `docker`).
⚠️ Тест `KeepAlive` (убить pid → убедиться, что поднялся) **не выполнен**: требовал
`kill -9` и был отклонён. Штатная проверка — `launchctl kickstart -k`.
#### 🔴 Питфолл: `BRIDGE_SECRET` и redaction Hermes
Команда, создающая `.env` через `python -c` с f-строкой `BRIDGE_SECRET={...}`, в логе выглядит
@@ -254,9 +276,19 @@ cd ~/Developer/agents-bridge
Добавить published route `agents-bridge.qentra.top` → HTTP `localhost:8790` +
Access Application. Токен и процесс cloudflared не трогаются. Проверка: `curl` извне на `/healthz`.
⚠️ hostname — **одноуровневый** (двухуровневые дают TLS handshake failure).
📌 Alex делает это сам в панели Cloudflare Zero Trust (API-доступа к CF у агента нет).
Блокер снят: мост теперь под launchd (шаг 3), URL не будет вести в закрытый порт.
**4. Секция «Agents» (~3-4 ч)**
6 роутов + вкладка + запись в `services.yaml` → `__pycache__` + `launchctl kickstart -k`.
**4. Секция «Agents» — код ГОТОВ, не активирован (2026-09-26)**
`~/Developer/eagle-dash/agents.py` (роутер, 8 эндпоинтов) + `main.py`
(`app.include_router`) + `services.yaml` (запись `agents_bridge`).
Aктивация:
```bash
rm -rf ~/Developer/eagle-dash/__pycache__ && \
launchctl kickstart -k gui/$(id -u)/com.eagle.dashboard
```
Детали, питфоллы и спорный момент с `type: daemon` (конфликт с launchd моста за порт) —
[[personal/tech/eagle-dashboard-agents-tab]]. Вкладка `?tab=agents` в шаблоне **ещё не сделана**.
**5. Связка Балда → мост (~2 ч)**
MCP-инструмент в Балде → `POST /task`; проба `echo ok > /agents/test/probe.txt`.
@@ -285,20 +317,30 @@ MCP-инструмент в Балде → `POST /task`; проба `echo ok > /
2. ~~Нужен ли `ask`-апрув~~ → при `allow_all` не нужен; при потребности начинать с B (апрув в мосте, ~0.5 дня)
3. 🔴 **Логин CLI — делает Alex сам.** Копирование auth-файлов отклонено; до логина задачи
возвращают `Not logged in`
4. 🔴 **Мост не в launchd** — поднят вручную (`uvicorn` в фоне), при перезагрузке Mac умрёт.
Плейт `com.agents.bridge` **обязателен до шага 3**: туннель опубликует URL, который может
вести в закрытый порт. Предложено, ждёт команды Alex
5. Hostname моста — `agents-bridge.qentra.top` (шаг 3, ждёт public route в Cloud Zero Trust)
6. Порт `8790` — проверено, свободен (`lsof -nP -i :8790`), занят мостом после запуска
7. ⚠️ В дашборде в `services.yaml` **нет** записи `agents_bridge` — добавить в шаге 4
(`health.type: http`, `url: http://127.0.0.1:8790/healthz`, `port: 8790`)
4. ~~Мост не в launchd~~ → ✅ **закрыто**: `com.agents.bridge` (`RunAtLoad` + `KeepAlive`)
5. 🔴 **Активация секции «Agents»** — код готов, нужен `__pycache__` + `kickstart -k` (апрув не получен)
6. ⚠️ **Конфликт за порт 8790** — `agents_bridge` в `services.yaml` объявлен `type: daemon`,
но мост уже управляется своим launchd. Ревизия при активации: `type: system` +
`health.type: launchctl` либо `type: none`. См. [[personal/tech/eagle-dashboard-agents-tab]] §4
7. ⚠️ Вкладка `?tab=agents` в `templates/index.html` не сделана — API готов, UI нет
8. Hostname моста — `agents-bridge.qentra.top` (шаг 3, public route добавляет Alex в CF)
9. Порт `8790` — свободен до старта моста, занят после; иных слушателей нет
10. ⚠️ Под launchd `agents.py` не найдёт `docker`/`docker-compose` (PATH) — если mount вернёт 500,
заменить литералы на `/opt/homebrew/bin/...`. Живьём не проверено (дашборд не перезапущен)
## Связанные заметки
- [[personal/projects/balda/balda-mm-delegation-plan]] — общий план (Фазы 4-5)
- [[personal/projects/balda/balda-kraken-mm-deploy]] — Фаза 3 (✅)
- [[personal/plans/balda-mm-pr-plan]] — Фаза 2 (PR #8)
- [[personal/tech/agents-bridge]] — мост :8790, API, питфоллы (шаг 2 ✅)
- [[personal/tech/eagle-dashboard-agents-tab]] — секция «Agents»: код, API, питфоллы (шаг 4, не активирован)
- [[personal/tech/macos-docker-virtiofs-mount-limits]] — ограничения macOS Docker
- [[personal/tech/balda-go-fx-pitfalls]] — fx-питфоллы, дельта-апплаер
- [[family/how-to/kraken-portainer-access]] — cloudflared, routes
- скилл `eagle-dashboard` — архитектура дашборда
## История
- **2026-09-26**: план создан; шаги 1-2 выполнены (образ, контейнер, мост на :8790).
- **2026-09-26** (продолжение): мост переведён под launchd (шаг 3 ✅, `com.agents.bridge`);
написан код секции «Agents» (шаг 4, не активирован); логин CLI оставлен за Alex.
Туннель (шаг 3 сети) — за Alex, в панели Cloudflare Zero Trust.