Перейти к основному содержимому

Руководство: Мониторинг через дашборд

Две команды дашборда

КомандаИнтерфейсURLТехнология
oma dashboardТерминал (TUI)N/Achokidar + picocolors
oma dashboard:webБраузерhttp://localhost:9847HTTP + 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/orchestrateID сессии, статус, версия
session-{workflow}.md/work, /ultraworkМетаданные, прогресс фаз
task-board.mdРабочие процессы оркестрацииТаблица назначений и статусов
progress-{agent}.mdКаждый запущенный агентНомер хода, текущее действие
result-{agent}.mdКаждый завершённый агентСтатус, файлы, проблемы, артефакты
debug-{id}.md/debugДиагноз, корневая причина, исправление
experiment-ledger.mdQuality ScoreБазовые линии, дельты, решения keep/discard
lessons-learned.mdАвтогенерацияУроки из отброшенных экспериментов

Как дашборд читает данные

  1. Обнаружение сессии — ищет orchestrator-session.md, затем самый свежий session-*.md
  2. Парсинг task board — Markdown-таблица -> статусы агентов
  3. Обнаружение агентов — паттерны **Agent**: {name} или Agent: {name} в файлах
  4. Подсчёт ходовturn: N из progress-{agent}.md
  5. Лента активности — 5 последних изменённых файлов

Устранение неполадок

Агент «running» без прогресса

Причины: Долгая операция, падение процесса, ожидание ввода.

Действия:

  1. Проверьте лог: cat /tmp/subagent-{session-id}-{agent-id}.log
  2. Проверьте статус: oma agent:status {session-id} {agent-id}
  3. Если процесс мёртв — перезапустите с контекстом ошибки

Агент «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