diff --git a/personal/plans/balda-callee-prism-plan.md b/personal/plans/balda-callee-prism-plan.md index a9d46788..94f6babe 100755 --- a/personal/plans/balda-callee-prism-plan.md +++ b/personal/plans/balda-callee-prism-plan.md @@ -147,6 +147,99 @@ spec: --- +## 2.5 Карта стека: кто кого дёргает + +``` +ВЫ (Mattermost / Telegram) + │ задача словами + ▼ +Балда-оркестратор — Kraken, balda-mm:0.1.13, DeepSeek + │ понимает задачу, читает Obsidian, решает куда идти, отвечает + │ НЕ пишет код, НЕ собирает, НЕ ходит по хостам + ▼ MCP-инструмент executor_run +balda-executor-mcp — Kraken, :8890, HTTP + X-Bridge-Secret + │ транспорт без логики + ▼ Cloudflare Tunnel (agents-bridge.qentra.top) +мост agents-bridge — Mac, :8790, launchd + │ транспорт без логики: идемпотентность, таймаут 900с, лимит 1 + ▼ docker exec +callee — Mac, контейнер balda-executor + │ ДВИЖОК ВОРКФЛОУ: компилирует граф, валидирует целиком до запуска + │ МОДЕЛИ НЕ СОДЕРЖИТ: дирижёр — раздаёт роли, гоняет циклы, собирает артефакт + ├─ Role ────► ACP-процесс ───► МОДЕЛЬ (DeepSeek / позже Codex) + ├─ Script ──► shell на Mac: git, docker build, xcodebuild, pytest + └─ Human ───► пауза, ответ реплаем в треде MM + ▼ +bd (Beads) — трекинг Story → Tasks, живёт между сессиями +``` + +### Кто есть кто + +| Компонент | Где | Что это | +|---|---|---| +| Балда | Kraken | Оркестратор верхнего уровня: понимает смысл задачи | +| balda-executor-mcp | Kraken | Проброс по HTTP, логики нет | +| мост `:8790` | Mac | Идемпотентность, таймаут, лимит 1, логики нет | +| **callee** | Mac | Движок воркфлоу. Граф, роли, циклы. **Не модель** | +| Role / DynamicRole | Mac | Узел, который зовёт модель | +| **ACP** | Mac | Протокол «редактор ↔ агент». Транспорт, не модель | +| **dsh / dsh-acp** | Mac | Адаптер: отдаёт DeepSeek по протоколу ACP | +| **Codex / Claude CLI** | Mac | Агент-харнесс: модель + умение править файлы и запускать команды | +| **bd (Beads)** | Mac | Память задач: что сделано, что нет | +| **prism** | Mac | Воркфлоу: specify → design → breakdown → human → apply → verify | +| tunnels | — | Cloudflare: Kraken→Mac по HTTP. **Не VPN** | +| **lume** | Mac | macOS-виртуалки. Только для задач, требующих настоящую macOS | + +📌 **`callee` не умеет ничего сам** — ни думать, ни писать код. Он берёт описание графа, +проверяет его и по шагам вызывает: роль → модель, скрипт → shell, human → пауза. +Вся содержательная работа — либо в модели через Role, либо в shell через Script. + +📌 **Модель ≠ агент-харнесс.** `dsh-acp` только отдаёт DeepSeek. `codex` — харнесс: +модель плюс умение править файлы, запускать команды, искать. Через ACP callee зовёт и то, +и другое. + +### Разбор сценариев + +| Сценарий | Механизм | Где исполняется | Статус | +|---|---|---|---| +| Настроить на **Mac** | `Script` → локальный shell | контейнер, только `~/agents` | ⚠️ `~/Developer` не смонтирован | +| Настроить на **TrueNAS** | `Script` → `ssh truenas_admin@mallexxx.duckdns.org` | контейнер | ❌ `~/.ssh` не смонтирован | +| Настроить на **Kraken** | `Script` → `ssh kraken` | контейнер | ❌ ssh не настроен; 🔴 риск потерять канал управления | +| Собрать **Xcode** | `Script` → `xcodebuild` | **lume VM с macOS** | ❌ в Linux-контейнере невозможно | +| Тесты в **lume** | `Script` → `lume` | **хост Mac** | ❌ `lume` стоит на хосте, не в контейнере | +| Собрать **докер-образ** | `Script` → `docker build` | **хост Mac** | ❌ `docker.sock` не смонтирован | + +🔴 **Корень:** шесть сценариев делятся на две группы, и текущая схема закрывает одну. + +| Группа | Сценарии | Где | +|---|---|---| +| В контейнере | файлы Mac, git, Linux-сборки | `balda-executor` | +| **Вне контейнера** | TrueNAS/Kraken по ssh, Xcode, lume, docker build | нужен доступ к хосту | + +**Причина одна:** контейнер изолирован. Нет `docker.sock`, `~/.ssh`, `lume`, Xcode, `~/Developer`. + +### Как закрывать: роли по исполнителям + +| Вариант | Суть | Оценка | +|---|---|---| +| **A. Роли по исполнителям** ✅ | контейнер чистый для Linux-задач; для остального роли ходят через `ssh` на хост и узлы. Требует `~/.ssh:ro` в контейнер + `ssh admin@host.docker.internal` | изоляция сохраняется; роли явно описаны в графе: «linux-задача», «macOS-задача», «удалённый хост» | +| B. Дать контейнеру больше прав | смонтировать `docker.sock`, `lume`, `~/Developer` | проще, но контейнер теряет изоляцию — одну из причин своего существования | + +**Решение: A.** + +### Чего нет в схеме (докрутить в C1) + +| Нужно | Статус | +|---|---| +| `~/.ssh` в контейнере | ❌ | +| `docker.sock` | ❌ | +| `lume` в контейнере | ❌ (стоит на хосте, v0.5.3) | +| ssh с контейнера на Kraken/TrueNAS | ❌ | +| lume VM как исполнитель | ❌ VM есть (`macos-15-golden`, `macos-27-golden`, `uitest-26.4.1-golden`, `pdf-hud-macos27`), интеграции нет | +| Разделение ролей по хостам | ❌ в графе не описано | + +--- + ## 3. Prism — таск-трекинг ### 3.1 Callee и prism — независимые установки