Руководство: Мониторинг через дашборд
Две команды дашборда
| Команда | Интерфейс | URL | Технология |
|---|---|---|---|
oma dashboard | Терминал (TUI) | N/A | chokidar + picocolors |
oma dashboard:web | Браузер | http://localhost:9847 | HTTP + WebSocket + chokidar |
Оба наблюдают за .serena/memories/.
Терминальный дашборд
oma dashboard
Box-drawing UI в терминале. Автообновление при изменении файлов памяти. Ctrl+C для выхода.
Символы статуса:
●(зелёный) — работает✓(голубой) — завершён✗(красный) — ошибка○(жёлтый) — заблокирован◌(тусклый) — ожидает
Веб-дашборд
oma dashboard:web
# Порт по умолчанию: 9847
DASHBOARD_PORT=8080 oma dashboard:web # Настраиваемый порт
Тёмная тема, WebSocket для живых обновлений, автопереподключение, цветные индикаторы, журнал активности, история сессий.
Раскладка на 3 терминала
┌────────────────────────────────┬────────────────────────────────┐
│ Терминал 1: Основной агент │ Терминал 2: Дашборд │
│ $ gemini │ $ oma dashboard │
│ > /orchestrate │ ╔═══════════════════════╗ │
│ ... │ ║ Serena Dashboard ║ │
│ │ ╚═══════════════════════╝ │
├────────────────────────────────┴────────────────────────────────┤
│ Терминал 3: Ad-hoc команды │
│ $ oma agent:status session-... backend frontend │
│ $ oma stats │
└─────────────────────────────────────────────────────────────────┘
Источники данных в .serena/memories/
| Паттерн файла | Создаётся | Содержимое |
|---|---|---|
orchestrator-session.md | /orchestrate | ID сессии, статус, версия |
session-{workflow}.md | /work, /ultrawork | Метаданные, прогресс фаз |
task-board.md | Рабочие процессы оркестрации | Таблица назначений и статусов |
progress-{agent}.md | Каждый запущенный агент | Номер хода, текущее действие |
result-{agent}.md | Каждый завершённый агент | Статус, файлы, проблемы, артефакты |
debug-{id}.md | /debug | Диагноз, корневая причина, исправление |
experiment-ledger.md | Quality Score | Базовые линии, дельты, решения keep/discard |
lessons-learned.md | Автогенерация | Уроки из отброшенных экспериментов |
Как дашборд читает данные
- Обнаружение сессии — ищет
orchestrator-session.md, затем самый свежийsession-*.md - Парсинг task board — Markdown-таблица -> статусы агентов
- Обнаружение агентов — паттерны
**Agent**: {name}илиAgent: {name}в файлах - Подсчёт ходов —
turn: Nизprogress-{agent}.md - Лента активности — 5 последних изменённых файлов
Устранение неполадок
Агент «running» без прогресса
Причины: Долгая операция, падение процесса, ожидание ввода.
Действия:
- Проверьте лог:
cat /tmp/subagent-{session-id}-{agent-id}.log - Проверьте статус:
oma agent:status {session-id} {agent-id} - Если процесс мёртв — перезапустите с контекстом ошибки
Агент «crashed»
Причины: Недостаток памяти, превышение квоты API, таймаут сети, отсутствие CLI/аутентификации.
Действия: Проверьте лог, oma doctor, oma auth:status, перезапустите.
«No agents detected yet»
Причины: Рабочий процесс ещё на этапе планирования, .serena/memories/ пуст, дашборд наблюдает не ту директорию.
Действия: ls -la .serena/memories/, подождите запуска агентов, или MEMORIES_DIR=/path oma dashboard.
Веб-дашборд «Disconnected»
Причины: Процесс oma dashboard:web завершён, порт занят.
Действия: ps aux | grep dashboard, попробуйте DASHBOARD_PORT=8080, lsof -i :9847. Автопереподключение: 1 сек начальная, 1.5x множитель, макс. 10 сек.
Чек-лист перед слиянием
- Все агенты «completed» — ни один в «running» или «blocked»
- Нет «failed» агентов
- QA-агент завершил ревью
- Ноль CRITICAL/HIGH замечаний
- Статус сессии COMPLETED
- Лента активности показывает финальный отчёт
Технические детали
Терминальный дашборд
- Наблюдение: chokidar с
awaitWriteFinish(200 мс стабильность, 50 мс опрос) - Рендеринг: Полная перерисовка при каждом изменении. picocolors для ANSI. Unicode box-drawing.
- Директория памяти:
MEMORIES_DIR-> аргумент CLI ->{cwd}/.serena/memories - Завершение: SIGINT/SIGTERM -> закрытие watcher -> чистый выход
Веб-дашборд
- HTTP: Node.js
createServer,/для HTML,/api/stateдля JSON - WebSocket: библиотека
ws. При подключении — полное состояние. Далее — обновления{ type: "update", event, file, data } - Наблюдение: Тот же chokidar. Изменения ->
broadcast()для всех WebSocket клиентов - Дебаунс: 100 мс для защиты от потока обновлений
- Автопереподключение: 1 сек, множитель 1.5x, макс. 10 сек
- Порт: 9847 по умолчанию, настраивается через
DASHBOARD_PORT